找回密码
 注册
关于网站域名变更的通知
查看: 684|回复: 1
打印 上一主题 下一主题

列向量互信息计算通用MATLAB代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-15 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
互信息的定义 0 p1 o$ v! @5 p8 P8 h
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
: l# T1 K, c7 E0 e" n2 ?0 O8 N0 b8 Y( g) l
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。! d$ H6 g1 c/ p1 G  d+ U* L, D' U% A

/ e6 Y8 s0 o/ z: _# d0 E其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。
2 b) y. T: x7 T$ ^( f9 x: e
8 r+ g7 ?3 }3 b2 p$ c9 h- L互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。9 `8 b& o! ~% V( P

3 u+ F# Y: w- ?4 P直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。). @7 g! n) ~: B; I( O5 H  b' `

7 v. n+ R1 `' c4 H4 L此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。" x3 J! `. k' Z0 K. \4 c3 ~
+ x& v8 j* s& I
通用MATLAB代码
1 v; V. p" v2 v主函数main.m
* q& ]2 }1 ^1 ^$ }0 a* \" Q/ w) p+ B8 q
clc4 E0 y3 \& H. T2 p  g, t
u1 = rand(4,1);5 P- b( q9 [2 n3 b  a9 z
u2 = [2;32;6666;5];/ o( l3 K! R) m
wind_size = size(u1,1);
( d1 W! x6 @1 L$ k& \* }mi = calmi(u1, u2, wind_size);
$ u6 N* z  F- [5 v$ o1 a. s3 q! Y4 x6 n, T0 B
calmi.m8 s; z4 G- N' v  }; R2 I) m% b
; y  l, ]) H# U
%计算两列向量之间的互信息
) G. Q' V0 X/ ]3 S4 f  @% u% f% p%u1:输入计算的向量1
3 n) x& t7 L% k- F6 Q1 i3 G7 n: l%u2:输入计算的向量25 b, u& ?' |! H
%wind_size:向量的长度
0 t  k) q$ C. Zfunction mi = calmi(u1, u2, wind_size)9 C+ Y6 ~8 V4 p/ h
x = [u1, u2];) @/ Y; d/ n; A' h/ w3 _  j: j
n = wind_size;
! \, b& e* e' I[xrow, xcol] = size(x);
8 T/ B. R5 @5 L! X2 Obin = zeros(xrow,xcol);% q4 T9 Y9 A8 R
pmf = zeros(n, 2);) l1 m4 K; l  B: B2 D( c& k: w
for i = 1:2, j% D/ h  z. q1 {+ ?
    minx = min(x(:,i));- \0 e1 O3 A& T( y
    maxx = max(x(:,i));8 D# R5 ]3 M3 ~' u; S
    binwidth = (maxx - minx) / n;1 h+ T) z6 N6 O. q2 i- [
    edges = minx + binwidth*(0:n);
7 T5 J6 E- }: K1 m    histcEdges = [-Inf edges(2:end-1) Inf];0 t' _- m5 n  Y7 K
    [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布
" V; h" {0 q3 P* ]+ H. L* y7 H    pmf(:,i) = occur(1:n)./xrow;
: w3 \4 b/ o5 y. B& L- R& m1 @3 m! @; @end( j; g1 |! z4 i+ w' u
%计算u1和u2的联合概率密度
9 V4 t. j$ {) K& PjointOccur = accumarray(bin,1,[n,n]);  %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度$ w8 \' g2 Q- C: R9 N
jointPmf = jointOccur./xrow;
7 d% M) d" _1 S( v! AHx = -(pmf(:,1))'*log2(pmf(:,1)+eps);
; W: t5 D$ }- h: a. ^Hy = -(pmf(:,2))'*log2(pmf(:,2)+eps);- w& J0 X1 b) \8 p9 X, \
Hxy = -(jointPmf(: ))'*log2(jointPmf(: )+eps);
7 S, q0 L0 i+ v/ a$ W. l. n4 F$ YMI = Hx+Hy-Hxy;
! o/ s/ e; }% Vmi = MI/sqrt(Hx*Hy);
" [; N& \  j$ ?! N1 p/ j+ e% B/ ^& B' b
% h0 i+ b5 Y. M- r- q, O

; j, l) {# j; A) Y" F% v1 R2 Z5 S

该用户从未签到

2#
发表于 2020-5-15 15:16 | 只看该作者
列向量互信息计算通用MATLAB代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 11:02 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表