Matlab计算列向量互信息

互信息的定义

  两个离散随机变量 X X X Y Y Y ,其联合概率分布函数为 p ( X , Y ) p(X,Y) p(X,Y),而边缘概率分布函数分别为 p ( X ) p(X) p(X) p ( Y ) p(Y) p(Y),其互信息可以定义为:
I ( X ; Y ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log ⁡ p ( x , y ) p ( x ) p ( y ) I(X ; Y)=\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \log \frac{p(x, y)}{p(x) p(y)} I(X;Y)=xXyYp(x,y)logp(x)p(y)p(x,y)
  在连续随机变量的情形下, p ( X , Y ) p(X,Y) p(X,Y) X X X Y Y Y 的联合概率分布函数,而 p ( X ) p(X) p(X) p ( Y ) p(Y) p(Y) 分别是 X X X Y Y Y 的边缘概率分布函数,求和被替换成了二重积分:
I ( X ; Y ) = ∫ X ∫ Y p ( x , y ) log ⁡ p ( x , y ) p ( x ) p ( y ) d x d y I(X ; Y)=\int_{X} \int_{Y} p(x, y) \log \frac{p(x, y)}{p(x) p(y)} d x d y I(X;Y)=XYp(x,y)logp(x)p(y)p(x,y)dxdy
  互信息量 I ( x i ; y j ) I(x_i ; y_j) I(xi;yj) 在联合概率空间 P ( X Y ) P(XY) P(XY) 中的统计平均值,平均互信息 I ( X ; Y ) I(X ; Y) I(X;Y) 克服了互信息量 I ( x i ; y j ) I(x_i ; y_j) I(xi;yj) 的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。
  在概率论或信息论中,两个随机变量的互信息是变量间相互依赖性的度量,即已知两个变量其中一个,对另一个不确定量减少的程度。如果 X X X Y Y Y 相互独立, X X X 不对 Y Y Y 提供任何信息,所以它们的互信息为零;如果 X X X Y Y Y 的一个确定性函数,且 Y Y Y 也是 X X X 的一个确定性函数,那么传递的所有信息被 X X X Y Y Y 共享。在此情形互信息与 Y Y Y(或 X X X)单独包含的不确定度相同,称作 Y Y Y(或 X X X)的熵。当 X X X Y Y Y 是相同随机变量时,互信息与 X X X 的熵和 Y Y Y 的熵相同。
  互信息是 X X X Y Y Y 联合分布相对于假定 X X X Y Y Y 独立情况下的联合分布之间的内在依赖性。当 X X X Y Y Y 为独立随机变量时, p ( x , y ) = p ( x ) p ( y ) p(x,y)=p(x)p(y) p(x,y)=p(x)p(y) ,因此 I ( X ; Y ) = 0 I(X ; Y)=0 I(X;Y)=0
  互信息的性质:非负性(即 I ( X ; Y ) ⩾ 0 I(X ; Y)\geqslant0 I(X;Y)0 )、对称性(即 I ( X ; Y ) = I ( Y ; X ) I(X ; Y)=I(Y ; X) I(X;Y)=I(Y;X))。

Matlab代码实现

% 计算两列向量间的互信息
% 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); % 标准化互信息,NMI=2*MI/(Hx+Hy) 或 NMI=MI/sqrt(Hx*Hy)
end
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值