Answers:
没有最佳数量的箱来估计带有直方图的互信息(MI)。最好的方法是通过交叉验证来选择它,或者依靠经验法则。这就是为什么提出许多不基于直方图的MI估计量的原因。
np.histogram2d(x, y, D)
D
x
y
估计直方图的bin数是一个老问题。您可能对Lauritz Dieckman的此演讲中有关估计MI的垃圾箱数感兴趣。该演讲基于Mike X Cohen的书中有关神经时间序列的章节。
IQR
斯科特规则(正态假设): 其中是标准偏差对于。小号XX
斯特吉斯(Sturges)的规则(可能低估了垃圾箱的数量,但对大好的): d X = ⌈ 1 + 登录2 Ñ ⌉
用直方图很难正确估计MI。然后,您可以选择其他估算器:
有很多用于估计MI的软件包:
我更喜欢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
并使用最高的值以较高的精度进行替换。