我有两个连续变量,并希望计算它们之间的互信息作为相似性的度量。
我读过一些帖子,建议使用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)
吗?
1条答案
按热度按时间9udxz4iz1#
我想你可能要找的函数是
mutual_info_regression
fromsklearn.feature_selection
。该函数将估计由连续值组成的目标向量与特征矩阵之间的互信息。
您可以在sklearn doc page上找到有关该函数的更多信息