Mutual Information互信息

简介

互信息(Mutual Information)是信息论中的概念,用来衡量两个随机变量之间的相互依赖程度。对于Mutual Information的介绍会用到KL散度(Kullback–Leibler divergence)的知识,可以参考https://www.jianshu.com/p/00254c4d0931。

定义

互信息可以定义为两个随机变量的联合分布与边缘分布的乘积的KL散度。
\begin{aligned} \mathrm{I}[\mathbf{x}, \mathbf{y}] & \equiv \mathrm{KL}(p(\mathbf{x}, \mathbf{y}) \mid p(\mathbf{x}) p(\mathbf{y})) \\ &=-\iint p(\mathbf{x}, \mathbf{y}) \ln \left(\frac{p(\mathbf{x}) p(\mathbf{y})}{p(\mathbf{x}, \mathbf{y})}\right) \mathrm{d} \mathbf{x} \mathrm{d} \mathbf{y} \end{aligned}
根据上述定义,不难发现,如果随机变量和相互独立,即,则;

性质

1 ,由KL Divergence的性质可以直接得出

2
Pf:
\begin{aligned} \mathrm{I}[x , y] &=-\iint p(x, y) \ln \frac{p(x)p(y)}{p(x \mid y)p(y)} d x d y \\ &=-\iint p(x, y) \ln p(x) dxdy+\iint p(x, y) \ln p(x \mid y) d x d y \\ & =\mathrm{H}[x] - \mathrm{H}[x \mid y] \end{aligned}其中表示熵,同理可以证明

通过性质2,我们可以从另一个角度认识互信息。比如可以视为已知之后,的不确定性减少的程度;同理,可以视为已知之后,的不确定性减少的程度.

Code

这里我们直接使用归一化之后的互信息,经过归一化之后,互信息的取值范围为[0,1]

import numpy as np
from scipy.stats import pearsonr
import matplotlib.pyplot as plt
from sklearn.metrics.cluster import normalized_mutual_info_score

rng = np.random.RandomState(1) #保证每次生成相同的随机序列

x = rng.normal(0, 5, size = 10000)
y = np.sin(x)
plt.scatter(x,y)
plt.xlabel('x')
plt.ylabel('y = sin(x)')

r = pearsonr(x,y)[0]
nmi = normalized_mutual_info_score(x,y)

数据分布如下所示:


Mutual Information互信息_第1张图片
x vs sin(x).png

这里我们将pcc的结果和nmi的结果进行对比,对于如上数据,pcc的结果为0.00083,完全没有相关性。而nmi的结果为1,表明x和y有很强的依赖关系。

Reference

https://zh.wikipedia.org/wiki/%E4%BA%92%E4%BF%A1%E6%81%AF

你可能感兴趣的:(Mutual Information互信息)