我有一个包含21个变量和75个数据点/行的数据集。我试图调查每对变量之间的相互信息,我在统计学上相当新手。我在sklearn.metrics中使用了mutual_info_score函数,这返回了一个大于0的数字。我如何知道mutual_info_score值的哪些值反映了依赖关系。例如,您如何知道是否仅探索1及以上,或2及以上等的值。
答案 0 :(得分:0)
相互信息是衡量标准。
import numpy as np
from sklearn.metrics import mutual_info_score
np.random.seed(42)
label_true = np.random.randint(0, 5, 75)
label_predict = np.random.randint(0, 5, 75)
print(mutual_info_score(label_true, label_predict))
即使有两个独立的随机标签,您也会看到非零互信息,
0.117333093974
您想要探索的是使用零假设检验 - 两个变量是否相关。 (null假设==独立)
您可以使用测试来实现独立性,例如:在scikit-learn中的chi2,
from sklearn.feature_selection import chi2
statsitic, p_val = chi2(label_true[:, None], label_predict[:, None])
if p_val < 0.05:
print('dependent')
else:
print('independent')
对于所有变量对,
import itertools
data = np.random.randint(0, 5, (75, 21))
p_value_matrix = np.zeros((21, 21))
for i, j in itertools.combinations(range(21), 2):
_, p_val = chi2(data[:, i][:, None], data[:, j][:, None])
p_value_matrix[i, j] = p_value_matrix[j, i] = p_val
if p_val < 0.05:
print('possibly dependent: {} -- {}'.format(i, j))
请注意,0.05是拒绝零假设的任意(但广泛使用)阈值。如果得到的p值大于阈值,我们不能拒绝零假设。