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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
互信息的定义
0 o% {, f1 H' O1 g4 h# @0 o2 d正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:2 P& ~0 F7 X; C' [$ X
0 A2 Z6 x4 K5 c5 Y8 a2 N
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
: m7 C! ^. n8 ]  `# H  m5 V2 u! ^3 {5 b! f+ v) z! j
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。
& X6 w$ P! @( V7 S; j; p7 ]1 C) ]/ v- }. C) q( G9 [
互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。1 p$ U8 |( k7 q5 s- ~6 b" w4 L
; W) x( L6 s0 n0 t1 u5 w
直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)
/ [( {! W. g- T) p' Q  d  r; F3 Q! I0 X
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。5 R+ t* y4 O+ c: t) ^: {: Q% H

/ _$ q7 `5 @  X" W* }  b. N" U通用MATLAB代码 " `+ F2 _, ~: c
主函数main.m
: S1 S( ^' Q& x# \! K
. o0 h4 I& H" |+ l/ {; sclc8 B* |* v6 `7 F
u1 = rand(4,1);; i( f; X; I( [0 F; g/ m* v
u2 = [2;32;6666;5];/ Y. W9 ~/ D. Q( c" \* r# K4 Q
wind_size = size(u1,1);: |7 u/ T' u& g  i8 e, W  q+ W
mi = calmi(u1, u2, wind_size);4 s3 Z0 q2 R; {5 H: w+ k4 c% s2 @

5 U/ z- y# M% L  qcalmi.m6 _9 Z4 L1 X# g4 A% O6 X

$ U# m3 c. m( i  p1 O. L! a%计算两列向量之间的互信息
0 M) f7 N- g$ w" W; {) S%u1:输入计算的向量1
4 e+ F, u( i' `' i7 ~%u2:输入计算的向量2& ~& U/ Q" \5 X
%wind_size:向量的长度5 i" v* L. e3 |  Y) W: _9 E# @; n
function mi = calmi(u1, u2, wind_size)$ c  I8 N7 ]& N( B0 E
x = [u1, u2];
. g# e8 R' L4 g7 J! Y8 ln = wind_size;4 J6 q2 `8 D) P9 B& ^# W+ i
[xrow, xcol] = size(x);  ^( i' \6 s5 z6 ~3 T- M
bin = zeros(xrow,xcol);
! V& `0 X. k' l2 x# P2 w# ~pmf = zeros(n, 2);
% }7 R; h/ d9 O5 ufor i = 1:26 _8 q) P  `" D. I
    minx = min(x(:,i));9 t8 M) @. _" S6 p3 F4 g
    maxx = max(x(:,i));1 D  J% q) V8 E
    binwidth = (maxx - minx) / n;
2 K! `- g5 y$ t! I    edges = minx + binwidth*(0:n);
8 k* ]' v* L+ F1 P    histcEdges = [-Inf edges(2:end-1) Inf];( z9 L/ Z* n$ p- i+ \$ d
    [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布( b  c& n: o' S. j8 D$ G
    pmf(:,i) = occur(1:n)./xrow;. l! i+ q5 w4 r0 }3 N. A
end5 W& E; H1 Q, s  {5 Z7 @* h
%计算u1和u2的联合概率密度
  r4 a8 L5 M" @4 e/ P9 y1 g2 I. IjointOccur = accumarray(bin,1,[n,n]);  %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度
% e% f. @  }) {2 H5 ^  [, ^0 J7 hjointPmf = jointOccur./xrow;
( Y( B( M; |6 e( r1 ^Hx = -(pmf(:,1))'*log2(pmf(:,1)+eps);
3 o9 w5 e, N/ O( uHy = -(pmf(:,2))'*log2(pmf(:,2)+eps);8 U0 [% Y% u- ], E% ]
Hxy = -(jointPmf(: ))'*log2(jointPmf(: )+eps);
, O5 `, u' V# N# o- x( R% P. D4 F% TMI = Hx+Hy-Hxy;- R) p! k6 o' X! `, D5 y! e
mi = MI/sqrt(Hx*Hy);
9 O9 a% m/ d* z: s9 [2 @
9 @3 i9 ^7 F1 O9 A" q4 C
& `8 I! ^$ }' r' g4 B" J* R$ E0 D) g& i

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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