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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
互信息的定义
% Z6 \# t" ?; T9 e; h正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:7 g$ h) |+ \3 a! D2 E& P

$ p$ N- J* q0 o) L其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。- P; N0 T. j8 v; v6 Q
& ~4 N5 h. m$ I5 N& w7 }
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。& H: m  V0 c" l$ W

$ n3 f& D) p/ a4 x+ E互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。
" _. @' @  j' T: S8 r/ R" o! e: ]- T) y, d8 ^4 g# ~
直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)
/ B1 @2 ~5 w+ x" y7 I. t
  O6 K5 S# z4 B: P/ {' X! _此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。/ n# P, h' ~+ h

/ W9 q& \9 k2 L& T* f通用MATLAB代码
2 a. U/ r. q1 u7 c主函数main.m' n* C+ s# A4 V$ P3 h
+ O( L/ a6 H1 F8 Y
clc8 j/ W# K$ @0 |  s# {: K
u1 = rand(4,1);
( X" q0 {. _% ]% W" \4 {5 |9 iu2 = [2;32;6666;5];
* [' j, M6 c0 D; l& ~wind_size = size(u1,1);
" e6 _3 Y! |* gmi = calmi(u1, u2, wind_size);6 S% h8 g; m, d: w

0 _$ e" N$ ]) |) `0 @- z6 Q. {calmi.m
$ o; {# w) F& ^+ }2 _* ]! A( s$ k% X& q' W+ g2 O3 a: @% n
%计算两列向量之间的互信息
9 ]1 Y' j& A8 Z. {%u1:输入计算的向量1. n8 w* s, y# J) c
%u2:输入计算的向量2
. Z5 w2 o9 M% c8 x" c7 |& o; S%wind_size:向量的长度1 ]! r8 ~' Z2 C) q9 x
function mi = calmi(u1, u2, wind_size); y4 w2 L1 ]; E+ R7 s
x = [u1, u2];/ W1 d0 |+ G; O7 ^/ u+ P1 e9 ~
n = wind_size;2 x7 M- S( A4 a9 p& ?# y9 K
[xrow, xcol] = size(x);
7 c4 e* T! x; K% Nbin = zeros(xrow,xcol);
5 O: t+ w/ C$ `pmf = zeros(n, 2);
+ r/ H" w5 A. Z0 `- K% Kfor i = 1:29 H7 J* v9 F) f+ i: [
    minx = min(x(:,i));) ]% z& R9 I/ J0 i% \6 P2 _( r( s
    maxx = max(x(:,i));
1 Y( o. _  j( N7 S# ?    binwidth = (maxx - minx) / n;' s( J, O2 P: `) M3 F9 n
    edges = minx + binwidth*(0:n);% j; {7 `+ ]' @/ m% V  b
    histcEdges = [-Inf edges(2:end-1) Inf];3 ^! \, o& q' c; `0 T' y
    [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布# V) y! v7 ~3 U9 F( |8 t5 W
    pmf(:,i) = occur(1:n)./xrow;. k4 V+ O0 b1 `( C
end4 @0 o6 d3 ?* H8 ~
%计算u1和u2的联合概率密度3 k  G5 ~: b+ a( j* o9 V
jointOccur = accumarray(bin,1,[n,n]);  %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度
4 n2 `# d, A# B0 N# ^' Y) K9 o" ~jointPmf = jointOccur./xrow;
! C* P. N1 w) n: WHx = -(pmf(:,1))'*log2(pmf(:,1)+eps);# M6 L4 ?2 ^. r
Hy = -(pmf(:,2))'*log2(pmf(:,2)+eps);8 y& M' k6 f8 W) e5 J. ]. Y
Hxy = -(jointPmf(: ))'*log2(jointPmf(: )+eps);
* y% F0 `' k% o2 }# v7 WMI = Hx+Hy-Hxy;
) P  g2 r7 b' t8 C  ~mi = MI/sqrt(Hx*Hy);
/ f7 L" e" u5 s
$ ?) {3 X/ p: K# o4 R
2 H" g8 ?( C4 k. W+ J
( _8 R- C" g" S$ E1 Y& h+ K

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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