互信息 特征选择python 互信息的性质_概率论和分解的边缘分布的乘积互信息 特征选择python 互信息的性质_概率论_02的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit


1 互信息定义

1.1 原始定义

互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04,其联合概率分布函数为互信息 特征选择python 互信息的性质_信息论_05,而边缘概率分布函数分别为互信息 特征选择python 互信息的性质_信息论_06互信息 特征选择python 互信息的性质_信息论_07,其互信息可以定义为:
互信息 特征选择python 互信息的性质_互信息 特征选择python_08
        在连续随机变量的情形下,互信息 特征选择python 互信息的性质_熵_09互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04的联合概率密度函数,而互信息 特征选择python 互信息的性质_信息论_06互信息 特征选择python 互信息的性质_信息论_07分别是互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04的边缘概率密度函数,求和被替换成了二重积分:
互信息 特征选择python 互信息的性质_互信息 特征选择python_16

互信息 特征选择python 互信息的性质_信息论_17在联合概率空间互信息 特征选择python 互信息的性质_熵_18中的统计平均值。 平均互信息互信息 特征选择python 互信息的性质_信息论_19克服了互信息量互信息 特征选择python 互信息的性质_信息论_17的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit

互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04相互独立,则知道互信息 特征选择python 互信息的性质_熵_03不对互信息 特征选择python 互信息的性质_互信息_04提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04的一个确定性函数,且互信息 特征选择python 互信息的性质_互信息_04也是互信息 特征选择python 互信息的性质_熵_03的一个确定性函数,那么传递的所有信息被互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04共享:知道互信息 特征选择python 互信息的性质_熵_03决定互信息 特征选择python 互信息的性质_互信息_04的值,反之亦然。因此,在此情形下,互信息互信息 特征选择python 互信息的性质_互信息_04(或互信息 特征选择python 互信息的性质_熵_03)单独包含的不确定度相同,称作互信息 特征选择python 互信息的性质_互信息_04(或互信息 特征选择python 互信息的性质_熵_03)的熵。而且,这个互信息与互信息 特征选择python 互信息的性质_熵_03的熵和互信息 特征选择python 互信息的性质_互信息_04的熵相同。(这种情形的一个非常特殊的情况是当 互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04为相同随机变量时。)

互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04联合分布相对于假定互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:互信息 特征选择python 互信息的性质_互信息 特征选择python_47,当且仅当互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04为独立随机变量。从一个方向很容易看出:当互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04独立时,互信息 特征选择python 互信息的性质_互信息 特征选择python_52,因此:
互信息 特征选择python 互信息的性质_概率论_53

1.2 用熵表示互信息

互信息 特征选择python 互信息的性质_互信息_54,其离散熵可以定义为:
互信息 特征选择python 互信息的性质_互信息 特征选择python_55
        其中: 花体互信息 特征选择python 互信息的性质_概率论_56表示为包含所有小互信息 特征选择python 互信息的性质_信息论_57元素的集合,互信息 特征选择python 互信息的性质_信息论_58以2为底。

        一个随机变量的熵越大,意味着不确定性越大,换言之,该随机变量包含的信息量越大。必然是事件是确定无疑的,并不含有不确定性,所以必然事件的熵应该是0,也就是说,必然事件不含有信息量。

        接下来推导如何用熵表示互信息:
1. 离散型
互信息 特征选择python 互信息的性质_互信息_59
2. 连续型
互信息 特征选择python 互信息的性质_概率论_60
        经过推导后,我们可以直观地看到互信息 特征选择python 互信息的性质_熵_61表示为原随机变量互信息 特征选择python 互信息的性质_熵_03的信息量,互信息 特征选择python 互信息的性质_互信息 特征选择python_63为知道事实互信息 特征选择python 互信息的性质_互信息_04互信息 特征选择python 互信息的性质_熵_03的信息量,互信息互信息 特征选择python 互信息的性质_信息论_19则表示为知道事实互信息 特征选择python 互信息的性质_互信息_04后,原来信息量减少了多少。用Venn图表示:



互信息 特征选择python 互信息的性质_互信息 特征选择python_68

图1 互信息、条件熵与联合熵


互信息 特征选择python 互信息的性质_互信息 特征选择python_69看作一个随机变量不确定度的量度,那么互信息 特征选择python 互信息的性质_熵_70就是互信息 特征选择python 互信息的性质_熵_03没有涉及到的互信息 特征选择python 互信息的性质_互信息_04的部分的不确定度的量度。这就是“在互信息 特征选择python 互信息的性质_熵_03已知之后互信息 特征选择python 互信息的性质_互信息_04的剩余不确定度的量”,于是第一个等式的右边就可以读作“互信息 特征选择python 互信息的性质_互信息_04的不确定度,减去在互信息 特征选择python 互信息的性质_熵_03已知之后互信息 特征选择python 互信息的性质_互信息_04的剩余不确定度的量”,此式等价于“移除知道互信息 特征选择python 互信息的性质_熵_03互信息 特征选择python 互信息的性质_互信息_04的不确定度的量”。这证实了互信息的直观意义为知道其中一个变量提供的另一个的信息量(即不确定度的减少量)。

互信息 特征选择python 互信息的性质_熵_80,于是互信息 特征选择python 互信息的性质_概率论_81。因此互信息 特征选择python 互信息的性质_互信息_82,我们可以制定”一个变量至少包含其他任何变量可以提供的与它有关的信息“的基本原理。


2 性质与应用

2.1 常用性质

1. 非负性
        由图1可知:互信息 特征选择python 互信息的性质_互信息_83,则
互信息 特征选择python 互信息的性质_互信息_84

2. 对称性
互信息 特征选择python 互信息的性质_互信息_85

3. 与条件熵和联合熵的关系
互信息 特征选择python 互信息的性质_互信息_86

4. 与K-L散度的关系
互信息 特征选择python 互信息的性质_概率论_87

2.2 应用领域
  • 通信中,信道容量是最大互信息
  • k-means,互信息被用作优化目标
  • 隐马尔可夫模型训练,可以采用最大互信息(MMI)标准。
  • RNA结构,可以从多序列比对预测RNA二级结构。
  • 互信息已被用作机器学习中的特征选择和特征变换的标准。它可用于表征变量的相关性和冗余性,例如最小冗余特征选择。
  • 互信息用于确定数据集的两个不同聚类的相似性
  • 单词的互信息通常用作语料库语言学中搭配计算的重要函数。
  • 医学成像中,互信息可以用于进行图像配准。
  • 时间序列分析中,可以用于相位同步的检测。
  • 互信息用于学习贝叶斯网络/动态贝叶斯网络的结构,这被认为可以解释随机变量之间的因果关系。
  • 决策树学习中,是一种loss function
2.3 其他形式

1. 条件互信息
互信息 特征选择python 互信息的性质_熵_88
        可以简写为:
互信息 特征选择python 互信息的性质_互信息 特征选择python_89

2. 方向信息(Directed Information)

互信息 特征选择python 互信息的性质_信息论_90,方向互信息:
互信息 特征选择python 互信息的性质_互信息_91

3. 与相关系数的关系

        互信息其中包含所有独立性(线性和非线性),不像correlation coefficients measures一样只包含线性。对于互信息与相关系数的关系,可以参考这篇博客:https://stats.stackexchange.com/questions/81659/mutual-information-versus-correlation

互信息 特征选择python 互信息的性质_概率论_92 的联合概率分布服从二元正态分布时,有以下性质:互信息 特征选择python 互信息的性质_互信息_93是相关系数
互信息 特征选择python 互信息的性质_互信息_94
        证明如下:
互信息 特征选择python 互信息的性质_信息论_95
        所以,
互信息 特征选择python 互信息的性质_信息论_96


3 代码实现

实现一:基于直方图

% function: main.m
clc
u1 = rand(4,1);
u2 = [2;32;6666;5];
wind_size = size(u1,1);
mi = calmi(u1, u2, wind_size);
% function: calmi.m
% u1:输入计算的向量1
% u2:输入计算的向量2
% wind_size:向量的长度
function mi = calmi(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)

histc函数制定数值边界为分界条件histc以 a=[1 2 3 4 5 6 7 8 9 0 ], edges=1:2:7 为例。
[n,bin]=histc(x,edges) 返回n=[2 2 2 1], bin=[ 1 1 2 2 3 3 4 0 0 0]。
edges=1:2:7即总共有三个数值分界,分别为1<=x<3, 3<=x<5, 5<=x<7,
n(1)=2表示a中落在第一个范围的数总共有两个,1和2;
n(2)=2表示a中落在第二个范围的数总共有两个,3和4;
n(3)=2表示a中落在第三个范围的数总共有两个,5和6;
n(4)=1表示a中的值等于edges最后一个值7的个数为1。
bin的值为a中的值分别在edges的哪个范围中(1就是在edges的第一个空中),若不在edges范围中,则返回0。

实现二:基于正态核的多变量核密度估计
        原理介绍:请阅读:Estimation of mutual information using kernel density estimatorsJackknife approach to the estimation of mutual information

function [Ixy,lambda]=MutualInfo(X,Y)
%%
% Estimating Mutual Information with Moon et al. 1995
% between X and Y
% Input parameter
% X and Y : data column vectors (nL*1, nL is the record length)
%
% Output 
% Ixy : Mutual Information
% lambda: scaled mutual information similar comparabble to cross-correlation coefficient
%
%  Programmed by 
%  Taesam Lee, Ph.D., Research Associate
%  INRS-ETE, Quebecc
%  Hydrologist 
%  Oct. 2010
%
%

X=X';
Y=Y';

d=2;
nx=length(X);
hx=(4/(d+2))^(1/(d+4))*nx^(-1/(d+4));

Xall=[X;Y];
sum1=0;
for is=1:nx

    pxy=p_mkde([X(is),Y(is)]',Xall,hx);
    px=p_mkde([X(is)],X,hx);
    py=p_mkde([Y(is)],Y,hx);
    sum1=sum1+log(pxy/(px*py));
end

Ixy=sum1/nx;

lambda=sqrt(1-exp(-2*Ixy));

%% Multivariate kernel density estimate using a normal kernel
% with the same h
% input data X : dim * number of records
%            x : the data point in order to estimate mkde (d*1) vector
%            h : smoothing parameter
function [pxy]=p_mkde(x,X,h);

s1=size(X);
d=s1(1);
N=s1(2);

Sxy=cov(X');
sum=0;
% p1=1/sqrt((2*pi)^d*det(Sxy))*1/(N*h^d);

% invS=inv(Sxy);
detS=det(Sxy);
for ix=1:N
    p2=(x-X(:,ix))'*(Sxy^(-1))*(x-X(:,ix));
    sum=sum+1/sqrt((2*pi)^d*detS)*exp(-p2/(2*h^2));
end
pxy=1/(N*h^d)*sum;

参考