计算互信息时的 bin 数量

机器算法验证 信息论 互信息 分箱
2022-03-21 23:39:29

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

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
3个回答

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

箱的数量将取决于数据点的总数您应该尽量避免太多的 bin,以避免两个变量之间的联合分布的估计错误。您还应该避免 bin 太少而无法捕捉到两个变量之间的关系。鉴于生成的二维直方图的宽度相等我个人会选择: 在这种情况下,对于两个均匀分布的随机变量,您至少有分直方图的每个单元格: nnp.histogram2d(x, y, D)Dxy

D=n/5
5
nDXDY5nD25D2n/5D=n/5
这是模拟(Cellucci, 2005)中提出的自适应分区方法的一种可能选择。后一种方法通常用于估计 MI 以推断遗传网络:例如在MIDER中。

如果您有很多数据点并且没有缺失值,则您不必太担心找到最佳的 bin 数量;例如,如果如果不是这种情况,您可以考虑为有限样本校正 MI。(Steuer et al., 2002)讨论了针对遗传网络推理任务对 MI 的一些修正。nn=100,000


估计直方图的 bin 数量是一个老问题。您可能会对Lauritz Dieckman 关于估计 MI 的 bin 数量的演讲感兴趣。本次演讲基于 Mike X Cohen书中关于神经时间序列的一章。

您可以单独选择,并使用用于估计一维直方图中 bin 数量的经验法则。DXDY

Freedman-Diaconis 规则(不假设分布): 其中是 75 分位数和 25 分位数之间的差异。在SE中查看这个相关问题

DX=maxXminX2IQRn1/3
IQR

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

DX=maxXminX3.5sXn1/3
sXX

Sturges 规则(可能会低估 bin 的数量,但对大有利): n

DX=1+log2n


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

  • Kraskov 的 NN 估计器,它对参数选择不太敏感:最近邻通常用作默认值。论文:(克拉斯科夫,2003)kk=4k=6
  • 用内核估计 MI (Moon, 1995)

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

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

我更喜欢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 的那些,您可以简单地使用较小alpha的值并使用最高值作为具有良好准确性的替换。

以下分箱规则应添加到 Simone 的列表中,这些规则已变得更加普遍:

假设互信息是由它们的联合熵调整的边际熵的总和,

I(X,Y)=H(X)+H(Y)H(X,Y)

以及最佳分箱规则 H(X)H(Y)Hacine-Gharbi et al. (2012)

BX=round(ξ6+23ξ+13)
其中ξ=(8+324N+1236N+729N2)13

最优分箱规则 H(X,Y)Hacine-Gharbi and Ravier (2018)

BX=BY=round[12(1+1+24N1ρ2)12]

在测量的各个项时应用这些分箱规则,您应该有一个互信息的最佳分箱低偏差估计器。I(X,Y)=H(X)+H(Y)H(X,Y)

Hacine-Gharbi, A., and P. Ravier (2018): “A Binning Formula of Bi-histogram
for Joint Entropy Estimation Using Mean Square Error Minimization.”
Pattern Recognition Letters, Vol. 101, pp. 21–28.

Hacine-Gharbi, A., P. Ravier, R. Harba, and T. Mohamadi (2012): “Low Bias
Histogram-Based Estimation of Mutual Information for Feature Selection.”
Pattern Recognition Letters, Vol. 33, pp. 1302–8.