列向量互信息计算

来源:互联网 发布:用友t3数据库在哪 编辑:程序博客网 时间:2024/05/08 21:57

1. 概述

首先信息熵的计算公式如下

其中I(X)表示X的信息量

:这里对数所使用的底,通常是 2, 自然常数e,或是10。当b = 2,熵的单位是bit;当b = e,熵的单位是nat;而当 b = 10,熵的单位是dit。
p(xi)是xi发生的概率英文里面叫做probability mass function,一个随机产生的事件所包含的信息本体数量,只与事件发生的机率相关。事件发生的机率越低,在事件真的发生时,接收到的信息中,包含的信息本体越大。含义是概率为 0 的事件对应的信息大, 反之信息量少,取对数的原因是使得乘积变为求和。信息熵即为信息量的数学期望。
则X,Y的联合信息量可以表示为

平均互信息为互信息的数学期望

则公式可以推出

2. 编码

%计算两列向量之间的互信息%u1:输入计算的向量1%u2:输入计算的向量2%wind_size:向量的维度function mi = calc_mi(u1, u2, wind_size)x = [u1, u2];n = wind_size;[xrow, xcol] = size(x);bin = zeros(xrow,xcol);pmf = zeros(n, 2);for i = 1:2    minx = min(x(:,i));    maxx = max(x(:,i));    binwidth = (maxx - minx) / n;    edges = minx + binwidth*(0:n);    histcEdges = [-Inf edges(2:end-1) Inf];    [occur,bin(:,i)] = histc(x(:,i),histcEdges,1); %通过直方图方式计算单个向量的直方图分布    pmf(:,i) = occur(1:n)./xrow;end%计算u1和u2的联合概率密度jointOccur = accumarray(bin,1,[n,n]);  %(xi,yi)两个数据同时落入n*n等分方格中的数量即为联合概率密度jointPmf = jointOccur./xrow;Hx = -(pmf(:,1))'*log2(pmf(:,1)+eps);Hy = -(pmf(:,2))'*log2(pmf(:,2)+eps);Hxy = -(jointPmf(:))'*log2(jointPmf(:)+eps);MI = Hx+Hy-Hxy;mi = MI/sqrt(Hx*Hy);

原创粉丝点击