美文网首页
Mutual Information互信息

Mutual Information互信息

作者: 坐看云起时zym | 来源:发表于2020-07-21 19:10 被阅读0次

    简介

    互信息(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}
    根据上述定义,不难发现,如果随机变量XY相互独立,即p(\mathbf{x}, \mathbf{y}) = p(\mathbf{x}) p(\mathbf{y}),则\mathrm{I}[\mathbf{x}, \mathbf{y}] = 0

    性质

    1 \mathrm{I}[\mathbf{x}, \mathbf{y}] \geq 0,由KL Divergence的性质可以直接得出

    2 \mathrm{I}[\mathbf{x}, \mathbf{y}]=\mathrm{H}[\mathbf{x}]-\mathrm{H}[\mathbf{x} \mid \mathbf{y}]=\mathrm{H}[\mathbf{y}]-\mathrm{H}[\mathbf{y} \mid \mathbf{x}]
    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}其中\mathrm{H}[.]表示熵,同理可以证明\mathrm{I}[\mathbf{x}, \mathbf{y}] = \mathrm{H}[\mathbf{y}]-\mathrm{H}[\mathbf{y} \mid \mathbf{x}]

    通过性质2,我们可以从另一个角度认识互信息。比如\mathrm{H}[\mathbf{x}]-\mathrm{H}[\mathbf{x} \mid \mathbf{y}]可以视为已知y之后,x的不确定性减少的程度;同理,\mathrm{I}[\mathbf{x}, \mathbf{y}] = \mathrm{H}[\mathbf{y}]-\mathrm{H}[\mathbf{y} \mid \mathbf{x}]可以视为已知x之后,y的不确定性减少的程度.

    Code

    这里我们直接使用归一化之后的互信息,经过归一化之后,互信息的取值范围为[0,1]
    \operatorname{NMI}[X, Y]=2 * \frac{ \mathrm{I}[x , y]}{\mathrm{H}[\mathbf{y}] + \mathrm{H}[\mathbf{x}]}

    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)
    

    数据分布如下所示:


    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互信息

          本文链接:https://www.haomeiwen.com/subject/ztwbkktx.html