关于互信息的一些注记(python)

可以确认是这样:

更复杂的 labels_2 的熵确实变大了。但联合熵也同步变大,求差之后对消,于是交集部分的互信息毫无差异。用图来看会更明确。

这张丑丑的图是我自己弄的

意味着什么呢,I(A,B)和I(A,C)的互信息量虽然相当,但H(B)<H©, 原有的指标H(A) 对标签集 C 而言,表达能力不足了,但也不是完全无效,依然有一定信息,从绝对信息量来说,还可以保持相当。比如[1,1,0,0,0] 作为指标区分不了[a,b,c,d,e] ,只能分开[a,b] 和 [c,d,e] ,和分开上一组标签中的[a] 和 [s] 是一样的。互信息虽然反映了指标(对于标签)的绝对表达能力(通过信息量来度量),但没有反映出指标集相对于标签集整体表达能力的真实减弱。此处我为了暴露互信息的缺陷,故意选择的labels_2 相对于labels_1 是一个更细化的标签集,花一些功夫可以证明,标签或指标的任何细化都无法被互信息基于绝对信息量的度量方式描述出来,一个可以记住的tip是:细化标签(或信号,它们是对称的)不会改变互信息的绝对值。

总结:重点是互信息提供的是指标和标签之间的绝对信息量,而这在实践中随指标集和标签集的自身规模变化而变化,并不真实反映指标集相对于标签集整体的表达能力,要在实际数据中使用互信息挑选指标就很容易进坑了,难怪这个指标表现得时好时坏,并不稳定。

那怎么让互信息能精确反映出这些变化呢?答案也很显然了,需要针对 H(A) 和 H(B) 的整体大小标准化,以消除H(A)和 H(B) 大小的影响,这就是标准化互信息(Normalized Mutual Information, 或 NMI)的思路。比如当 I(A,B) 只是H(A)或H(B)中很小的一部分,标准化后得到的低比例就能反映出指标表达能力的缺陷。

从上面的图示可以直观看出,当 H(A) = H(B) 时 (A,B两个圆重合),I(A,B) = H(A) = H(B) = H(A,B), 此时 I(A,B)最大,I(A,B) 最大时也就是占满 A或 B的时候,因为对称性,必须同时占满。 这可以召唤起我们对均值不等式在a等于 b 时取极值的回忆。这事实上揭示了normalized mutual information 的公式:

式(1)使用几何平均描述 H(A)和H(B)的规模,式(2)使用算术平均。

是的,这两个都是有效的 NMI 的公式,并且都在[0, 1]闭区间内取值,0代表两组变量完全无关,1代表完全相关。两个公式只是采用算术平均和几何平均的差异。说到均值,均值在统计中,简直是“被嫌弃的均值”,因为它无法反应分布整体情况且容易被极值影响,在描述统计量时避免用均值改用分位数已是常识。但在数学上,均值的重要意义和均值不等式密切相关,当遇到需要相等时取极值的情况,此处就往往隐藏了均值的身影。

下面来验算一下我们的公式,看看是否有效。

MI_1 和 MI_2 无法区分, NMI_1 == 1 代表此时信号能完全描述标签,NMI_2 < 1 代表信号不足。

一例胜千言,由上可见,NMI 确实是一个比 MI 鉴别能力更强的指标,对之前MI 无法区分的情况也给出了有效度量,我们这里的计算采用几何平均的版本,和 sklearn 保持了一致,还可以用 sklearn 对NMI的现成实现来验算一下:

没错,和我们的计算结果一致。

之前说到过,熵有单位,并基于所用的对数底的不同而不同,以2为底时,一个公平的硬币(两面概率相等)的熵正好是1,代表用1个2进制比特正好可以描述硬币的信息量(正或反),但用自然对数为底并不影响我们对信息量的度量,只是比特的单位变了(于是值有所不同)。从互信息的公式 I(A,B) = H(A)+H(B)-H(A,B) 可以看出互信息的单位也是比特。但normalized 后的标准化互信息(NMI)其实是没有单位的一个比率(分子和分母的单位消掉了,和物理公式一样),因为没有单位,所以感兴趣的读者可以验算一下,不管 entropy 实现时用什么为底,最终的 NMI 值是一样的。

补充一下,sklearn.metrics 中虽然就有 normalized_mutual_info_score 的现成函数,但实际工作场景中如果数据量大的话,往往自己从 H(A), H(B) 和 H(A,B) 计算会更有效率,这个效率不是因为 sklearn 的实现低效,而是你为了满足其输入参数,构造一个个指标序列和标签序列是开销非常大的对象构建过程,建议尽量避免。

最后,在遇到那些建议使用互信息来度量变量相关性却对标准化互信息不置一词的书或文章时,要小心其余的部分,明显这样的作者并没有充分研究过他所谈论的对象。

    <div class="mod-tags">
            <a href="https://www.douban.com/note/tags/%E6%9C%AF?people=NullPointer&amp;all=1" target="_blank">术</a>
            <a href="https://www.douban.com/note/tags/%E9%87%8D?people=NullPointer&amp;all=1" target="_blank">重</a>
    </div>

            <div id="link-report_note">
            <div class="report"><a rel="nofollow" href="javascript:void(0)">举报</a></div></div>
    </div>
</div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值