python 连续变量的互信息与scikit-learn

ijnw1ujt  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(210)

我有两个连续变量,并希望计算它们之间的互信息作为相似性的度量。
我读过一些帖子,建议使用scikit-learn中的mutual_info_score,但这对连续变量有效吗?一个SO答案建议使用np.histogram2d()将数据转换为概率,并将列联表传递给mutual_info_score

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

x = [1,0,1,1,2,2,2,2,3,6,5,6,8,7,8,9]
y = [3,0,4,4,4,5,4,6,7,7,8,6,8,7,9,9]

mi = calc_MI(x,y,4)

这是一个有效的方法吗?我问,因为我也读到,当变量是连续的,那么在离散数据的公式中的总和成为积分。但这种方法是在scikit-learn或任何其他包实现?
编辑:
更真实的数据集

L = np.linalg.cholesky( [[1.0, 0.60], [0.60, 1.0]])

uncorrelated = np.random.standard_normal((2, 300))
correlated = np.dot(L, uncorrelated)

A = correlated[0]
B = correlated[1]

x = (A - np.mean(A)) / np.std(A)
y = (B - np.mean(B)) / np.std(B)

我可以在这些数据上使用calc_MI(x,y,bins=50)吗?

9udxz4iz

9udxz4iz1#

我想你可能要找的函数是mutual_info_regression from sklearn.feature_selection
该函数将估计由连续值组成的目标向量与特征矩阵之间的互信息。
您可以在sklearn doc page上找到有关该函数的更多信息

相关问题