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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
互信息的定义
5 s  M2 g8 i9 i0 x0 [% u0 _正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
! y$ Z' W/ \1 j6 T2 [. \% M1 r0 r9 L6 |4 E+ S$ H$ D
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
8 n3 ?* K! r; E6 ]: D' G. `. _: Q1 p8 ]  b/ ~0 f* F7 l
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。! a# M3 C! q4 P5 t0 H6 A

  B7 H9 K) T: p互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。. q" X+ G4 ]! v3 Q3 ]
5 a0 N+ r8 k6 e5 P2 G- x
直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)0 W$ W/ o8 J- }1 Q' R3 r' l
3 i: I, p$ f9 V- V, x) H
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。1 H% V) a" t' F
. Y% Q- y4 y" O9 m1 x; F
通用MATLAB代码
6 m; t6 o$ O/ {/ T. d/ c主函数main.m
1 e& Q5 y  n4 x1 P) j/ p$ t; Y
& q* J1 A6 W$ e7 wclc
0 o6 ~$ q7 N7 f1 T" {& q7 Cu1 = rand(4,1);& N2 O- m$ [, M6 l
u2 = [2;32;6666;5];% H! z3 K- @4 g1 D% f- I
wind_size = size(u1,1);
9 b2 G) U& }6 gmi = calmi(u1, u2, wind_size);: o% @( m3 a  ^5 P3 ~  a( Z
1 V3 v* B1 F! i  z0 Q3 f* d
calmi.m+ H7 H8 Q4 [! D% O3 v) }; N5 C& k

! |8 z7 _* H; p%计算两列向量之间的互信息
4 Q0 H' ^' l( ?, s5 n%u1:输入计算的向量1
+ Y& U  l  X# L; }%u2:输入计算的向量24 {0 b  u/ j! P6 ~! F1 G9 U
%wind_size:向量的长度
' i0 |8 l. E) _function mi = calmi(u1, u2, wind_size)" o" r( S# O/ q, U
x = [u1, u2];
5 X( c" I9 h" q  z# `2 D+ P: v( bn = wind_size;
" q1 b- C/ m8 x" j( B[xrow, xcol] = size(x);
2 d6 ]2 e( s) K. G$ jbin = zeros(xrow,xcol);4 l! X; I# R7 R6 |' i2 J5 d
pmf = zeros(n, 2);
# {% s# r' w4 k# [; [6 {/ ofor i = 1:2- o* m+ D$ V2 K4 h
    minx = min(x(:,i));
& U# Y0 ~  }# y8 g1 O    maxx = max(x(:,i));
# F+ W% q# B' S% @. h; i9 a; T    binwidth = (maxx - minx) / n;
0 e! I8 Q( ~7 S* j7 W  Z    edges = minx + binwidth*(0:n);' P, W& J$ s: W5 C" O0 Y
    histcEdges = [-Inf edges(2:end-1) Inf];! V: P+ i$ O2 K8 Y
    [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布
# y% ]% D. w/ J4 I# E    pmf(:,i) = occur(1:n)./xrow;& Q+ C! z2 R8 C( D
end
' `% P. q- g9 ~3 t" Q) d%计算u1和u2的联合概率密度: N9 D& t/ c0 e. d5 B
jointOccur = accumarray(bin,1,[n,n]);  %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度2 s( X+ ^* L5 J
jointPmf = jointOccur./xrow;( ?8 f4 P$ v8 t6 p* f& [* U
Hx = -(pmf(:,1))'*log2(pmf(:,1)+eps);
. x: ^0 H& _. [8 `5 IHy = -(pmf(:,2))'*log2(pmf(:,2)+eps);
: V* i) S3 \! X. @/ HHxy = -(jointPmf(: ))'*log2(jointPmf(: )+eps);. }5 @! `# a1 V5 e1 K2 A' o
MI = Hx+Hy-Hxy;
: R5 l1 K6 h5 \! l/ [mi = MI/sqrt(Hx*Hy);
; C$ T& S9 j9 e: z, @6 J) q6 g" ~

/ h4 X) ^$ A! e7 ]( M& v: j* f  W" k/ W* L! i

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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