互信息的定义
两个离散随机变量
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)=x∈X∑y∈Y∑p(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)=∫X∫Yp(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