|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
互信息的定义 : y+ H6 y& b' C8 Q2 f+ g
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:6 K o4 @$ C2 G
. N# J! E' b( A* k3 G& ]8 x其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
6 K6 E3 s0 G0 T5 _4 Y' U
3 p- D7 G3 L r- t; ? n其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。* [) F2 U+ n3 C' Y& A- k
) }' J, p& ~1 V7 A6 l6 y o: ]- w互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。
+ N" n, e s; ]2 b2 T5 d
- a4 Z. m7 v) F0 b9 H直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)
+ O" K w8 ]/ L3 h& l; B u6 b) ]2 @8 x; S$ R2 F1 y
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。( E$ Z/ r5 ^8 U9 m( c1 j" V
B8 r; h+ r0 |/ f0 d
通用MATLAB代码
7 S n- Q- V0 U# K9 J主函数main.m8 W( Q( ^- w9 D! _+ g' Y
# v: U; N# T: ~' {clc, h! q7 s$ V7 C# `' y3 C0 @
u1 = rand(4,1);5 c; S# k! o7 [6 w9 x$ w+ l# [0 V
u2 = [2;32;6666;5];$ Y+ L0 {. i: l
wind_size = size(u1,1);9 @0 Q; o* V8 B3 E
mi = calmi(u1, u2, wind_size);' M8 A1 L0 d* L3 j: i
8 O2 Z* T5 Z- p) C/ Ecalmi.m& F) \, F+ j/ {! ]" n
6 D) X" z- |! g+ f, S g0 z* K
%计算两列向量之间的互信息
. m8 Q b4 }- c7 E2 F o7 _2 |%u1:输入计算的向量11 h k y3 P( p4 s# `+ Z2 {. z
%u2:输入计算的向量2* G3 a M1 S0 }! c# U" b
%wind_size:向量的长度0 `- L: G3 _1 ^* ]& M
function mi = calmi(u1, u2, wind_size)7 h5 s$ K8 {3 c% n, i4 R
x = [u1, u2];7 R) ?7 s/ o; @: J. I
n = wind_size;
! L/ r& k" j" [# @0 c[xrow, xcol] = size(x);& {4 B8 V3 r( D+ e: q" S1 T3 l/ a& q
bin = zeros(xrow,xcol);
. A: k( V5 C" o% Opmf = zeros(n, 2); y. g- ?2 R) `$ ?$ G* j( h% Y
for i = 1:28 K/ P4 o: q4 ?+ s
minx = min(x(:,i));0 [$ P* u; C7 j
maxx = max(x(:,i));; }/ x& H# K: H/ @( [
binwidth = (maxx - minx) / n;
: R4 s9 J3 k0 X/ { edges = minx + binwidth*(0:n);' ?' U9 ^: k. j* E* C
histcEdges = [-Inf edges(2:end-1) Inf];
5 U3 h# e q Q& ^ [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布
: r X7 r, l# W5 a1 K9 w$ \ pmf(:,i) = occur(1:n)./xrow;2 S9 X) P$ C+ t- R% x8 {
end* {0 |( D$ ^/ Z* K2 D
%计算u1和u2的联合概率密度+ z5 i9 V# G5 U, I% ?8 {3 q! o# K
jointOccur = accumarray(bin,1,[n,n]); %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度* N2 m. @& T2 y$ b, P4 U
jointPmf = jointOccur./xrow;
4 L' j0 H' [5 F2 I) o; J) KHx = -(pmf(:,1))'*log2(pmf(:,1)+eps);
. @5 {/ K# v1 y- ]Hy = -(pmf(:,2))'*log2(pmf(:,2)+eps);
7 s# j0 c r$ n3 [# N& h. EHxy = -(jointPmf(: ))'*log2(jointPmf(: )+eps);0 K1 f2 j; p) j5 U; q
MI = Hx+Hy-Hxy;2 k' q( a+ R; Q2 X' q
mi = MI/sqrt(Hx*Hy);
" `( b# o0 Y8 ^6 n6 W
( t0 ^: n; m) r- u
: F( \& ~ ~: X `# t* P% H, x: ^+ U1 g. i: `
|
|