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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
互信息的定义 . {& Y7 a! D+ Y" d, [% Q
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
* s0 N, R' g0 @3 U# J
7 u- [- w" ~! W$ n其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。9 O! j0 J2 E* N

2 J* A$ @9 N; i) X其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。
; \" E# G* m1 Z/ p5 N. I5 P: b3 A& d! A
互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。! f0 K$ Y- Z$ B% ~7 t( |

9 \0 B' M1 Z: G直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)
* p; g, `- \. Q
1 k5 F5 l' ]7 m( {# @( ]' u此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。( i3 J6 \& E& f1 K

, v! V' a# n# U4 e+ x' D通用MATLAB代码
+ m. |" C" L( R! D% E, f, J6 i主函数main.m
5 Z, @4 i7 l3 d9 i0 F$ ~# l$ I" u% |7 E$ m" V- L
clc
7 B/ Y% B. k: f! j# V# {4 Nu1 = rand(4,1);' O& }# j6 ~* \
u2 = [2;32;6666;5];& [, g2 M* Z2 ?7 P4 D7 Y
wind_size = size(u1,1);
1 X1 C9 ]+ I& W9 Y% n( Tmi = calmi(u1, u2, wind_size);0 ^9 E8 G+ J$ z- I9 z
/ m4 Y- X" @6 t" o$ @; ]
calmi.m( e. i; n/ A7 Y; I7 \- p+ t

) ]. _/ Q7 ]5 @: n%计算两列向量之间的互信息
: W( N, R+ n4 r  c2 S%u1:输入计算的向量1& A; C& U3 ?" G. U8 o( _
%u2:输入计算的向量2
  I5 A( I' |9 V5 d6 P8 p4 ?: B1 r%wind_size:向量的长度& P. _0 N  E& b/ i" r2 r; a
function mi = calmi(u1, u2, wind_size), \! G  I2 s. S: G) B/ O/ s3 s) Q
x = [u1, u2];  R; X! r$ ]. E1 |* q
n = wind_size;
% J; Y' f7 f9 x& ?4 ~[xrow, xcol] = size(x);* O0 g) E3 b* {
bin = zeros(xrow,xcol);6 z; E* i, u0 E5 m- \
pmf = zeros(n, 2);
) O2 L( k' ^! `for i = 1:2
0 Z4 P+ O* l& O5 b/ E& Q0 Q& ^    minx = min(x(:,i));9 I7 b: A4 ^2 O
    maxx = max(x(:,i));: |* A  x5 w% K: D0 `6 Y
    binwidth = (maxx - minx) / n;; w3 `8 E9 l8 v3 d7 E. V2 ?7 G
    edges = minx + binwidth*(0:n);
9 q  b5 _& a9 }0 j+ |' f! x9 S: P    histcEdges = [-Inf edges(2:end-1) Inf];7 [+ ?, S& s- m3 ^
    [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布
  Q: t9 }# B$ ~7 ~+ U8 y    pmf(:,i) = occur(1:n)./xrow;+ O' s/ {3 I9 s* ]1 s6 Y2 a7 n
end
# F0 n7 u. ~" R: [; S  h% Y%计算u1和u2的联合概率密度
3 h  [3 b. v6 p5 F+ ZjointOccur = accumarray(bin,1,[n,n]);  %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度9 \) D9 |4 V# v* N& m5 j- _) h
jointPmf = jointOccur./xrow;
- w/ j. @( W# o2 G4 d; Y! ?Hx = -(pmf(:,1))'*log2(pmf(:,1)+eps);7 N  f) T; ]  U' K% I) G
Hy = -(pmf(:,2))'*log2(pmf(:,2)+eps);
$ z% ^: ~$ C! Z1 Y1 }  PHxy = -(jointPmf(: ))'*log2(jointPmf(: )+eps);
! e6 q  E' O' P2 I- {* sMI = Hx+Hy-Hxy;
. u8 G" a4 b9 \* }; Qmi = MI/sqrt(Hx*Hy);3 t, z" ~1 S# _8 l$ E# ^6 \

9 A: S7 F0 b- b7 y$ E7 X2 ]
3 l. L! E+ X* K/ `
. X4 f  s9 a' l4 n

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 20:00 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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