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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
互信息的定义 ! g$ q0 c, R. @: a( l; z
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
7 ?& m  a8 z/ x  B! |: ~/ a: @4 ~" X8 [
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
4 }; j8 Z* U3 c8 F
: V$ @( p- a8 {, H% m其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。. y  T7 \5 }6 }
; P) P) ^# g; o6 |( ^6 E
互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。6 V# Y1 I2 `+ ]6 Q) z+ K

1 v/ o2 q) D) b2 T: K4 u直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)
1 o" q; q7 B: W' `# L
% d: }* [; @  K& `( Y% T5 n此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。( s% C' h! X( R

* C$ I* x4 j9 L. b! e8 _5 k通用MATLAB代码
2 W+ S9 G3 e; V/ @4 f/ `主函数main.m
' ~. j% |% y, o6 l/ L% ^; o9 g% O) A; u6 J
clc# f* A* R$ V$ E* ^
u1 = rand(4,1);) j  \. c* F0 f. ~* A8 f
u2 = [2;32;6666;5];
8 T/ q" V5 @6 J) E+ Mwind_size = size(u1,1);
5 x8 m8 x( x* E) Q  D1 Hmi = calmi(u1, u2, wind_size);5 L$ Y& T8 o" D. D) C

! Q( `% i0 o7 f. `" d! j  q1 y6 ncalmi.m( g, m/ x+ Z* s! F
& j; m& Z9 k4 S: ~: n8 Q2 k% \, o( a
%计算两列向量之间的互信息" {( l3 F% M1 z. F1 W8 w
%u1:输入计算的向量1, W8 {4 i3 o! ~4 ^! n
%u2:输入计算的向量2
0 w. r2 X- b0 a& J2 \. I7 d$ {%wind_size:向量的长度. F0 a- d+ `  x
function mi = calmi(u1, u2, wind_size)
4 {" `, ?( z- Jx = [u1, u2];* @; y+ H8 h$ S+ W9 M/ [  q
n = wind_size;6 r5 X  w7 z: ~1 a
[xrow, xcol] = size(x);% I8 o# K+ `9 t$ Z' r
bin = zeros(xrow,xcol);& M4 f5 {* d% Z, V
pmf = zeros(n, 2);
  [4 Y+ }" m+ x2 @for i = 1:2
+ C- I) o. T- s, Z. ?# I    minx = min(x(:,i));+ I( A$ p! K  }& K( i
    maxx = max(x(:,i));
5 B' E5 X/ U% Q    binwidth = (maxx - minx) / n;
! ]: J9 g" ~0 n8 z: o    edges = minx + binwidth*(0:n);3 _9 p/ j' C  s3 ^
    histcEdges = [-Inf edges(2:end-1) Inf];6 x' D1 T6 A; Q/ o$ \' {0 d9 _
    [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布
; G, D2 P6 J! @2 K- F0 C  t    pmf(:,i) = occur(1:n)./xrow;
  r0 F5 X) a+ o" p5 Lend3 x1 ^1 F  O* G0 y! c. F. w& S
%计算u1和u2的联合概率密度
* r' C" z8 F3 Y: d# ijointOccur = accumarray(bin,1,[n,n]);  %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度/ b/ p. w+ }* O
jointPmf = jointOccur./xrow;
. Q9 Y; I( k6 tHx = -(pmf(:,1))'*log2(pmf(:,1)+eps);
# S2 d" k# j! _' l- @Hy = -(pmf(:,2))'*log2(pmf(:,2)+eps);
; ^, w4 F# G0 jHxy = -(jointPmf(: ))'*log2(jointPmf(: )+eps);9 n, j. q. f- Z6 ^! @: c: u" n% j
MI = Hx+Hy-Hxy;
$ T' n1 T' j3 F9 lmi = MI/sqrt(Hx*Hy);) a4 H$ R$ m8 J7 t4 L& B
7 T" P" ]3 s: T, P- e: S

9 U& y4 y" W. L5 W; E
: j2 ^% _# J4 S% u( v9 y0 I

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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