计算互信息时的箱数


10

我想使用互信息来量化两个变量A和B之间的关系。计算它的方法是对观察值进行分箱(请参见下面的示例Python代码)。但是,什么因素决定合理数量的箱?我需要计算速度快,所以我不能简单地使用很多垃圾箱来保证安全。

from sklearn.metrics import mutual_info_score

def calc_MI(x, y, bins):
    c_xy = np.histogram2d(x, y, bins)[0]
    mi = mutual_info_score(None, None, contingency=c_xy)
    return mi

Answers:


15

没有最佳数量的箱来估计带有直方图的互信息(MI)。最好的方法是通过交叉验证来选择它,或者依靠经验法则。这就是为什么提出许多不基于直方图的MI估计量的原因。

nnp.histogram2d(x, y, D)Dxy

D=n/5
5
nDXDY5nD25D2n/5D=n/5

nn=100,000


估计直方图的bin数是一个老问题。您可能对Lauritz Dieckman的此演讲中有关估计MI的垃圾箱数感兴趣。该演讲基于Mike X Cohen的书中有关神经时间序列的章节。

DXDY

IQR

DX=maxXminX2IQRn1/3
IQR

斯科特规则(正态假设): 其中是标准偏差对于。小号XX

DX=maxXminX3.5sXn1/3
sXX

斯特吉斯Sturges)的规则(可能低估了垃圾箱的数量,但对大好的): d X = 1 + 登录2 Ñn

DX=1+log2n

用直方图很难正确估计MI。然后,您可以选择其他估算器:

有很多用于估计MI的软件包:

  • 适用于Python的非参数熵估计工具箱。网站
  • Java中的信息动力学工具包,但也可用于Python。网站
  • Matlab中的ITE工具箱。网站

1

我更喜欢minepy在python中获取和估计相互信息。

您可以在此处查看该软件包的实现细节,并在此处查看示例代码。为了便于参考,我将示例复制并粘贴到此处:

import numpy as np
from minepy import MINE

def print_stats(mine):
    print "MIC", mine.mic()
    print "MAS", mine.mas()
    print "MEV", mine.mev()
    print "MCN (eps=0)", mine.mcn(0)
    print "MCN (eps=1-MIC)", mine.mcn_general()

x = np.linspace(0, 1, 1000)
y = np.sin(10 * np.pi * x) + x
mine = MINE(alpha=0.6, c=15)
mine.compute_score(x, y)

print "Without noise:"
print_stats(mine)
print

np.random.seed(0)
y +=np.random.uniform(-1, 1, x.shape[0]) # add some noise
mine.compute_score(x, y)

print "With noise:"
print_stats(mine)

将其作为输出:

Without noise:
MIC 1.0
MAS 0.726071574374
MEV 1.0
MCN (eps=0) 4.58496250072
MCN (eps=1-MIC) 4.58496250072

With noise:
MIC 0.505716693417
MAS 0.365399904262
MEV 0.505716693417
MCN (eps=0) 5.95419631039
MCN (eps=1-MIC) 3.80735492206

我的经验是结果对敏感alpha,默认值.6是一个合理的值。但是,在我的真实数据alpha=.3上,速度更快,并且估计的互信息与的情况具有极高的相关性alpha=.6。因此,如果您使用MI来选择具有较高MI的MI,则可以简单地使用较小的MI alpha并使用最高的值以较高的精度进行替换。


谢谢!您是否将Minpy和sklearn进行了MI估计?
pir 2015年

不,我没有。我不确定为什么不行!
adrin 2015年

我刚刚完成了sklearn和minepy的比较(alpha = 0.3和alpha = 0.6)。结果有很大的不同!由于它很容易,您可能还应该同时使用两个库检查结果:)
pir 2015年

2
MIC不等于共同信息(MI)。它们是完全不同的两件事。
西蒙妮2015年

1
是的,可以。在原始的MIC论文中,MI和MIC之间有很多比较:uvm.edu/~cdanfort/csc-reading-group / ... MIC证明它可以用作功能关系的噪声量的代理-该属性在原始论文中称为“公平性”。尽管如此,MI对于许多任务仍然是很好的依赖度量:例如特征选择或遗传网络推断。估计也比MIC快。
西蒙妮2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.