Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 互信息重要性水平_Python_Dependencies_Data Analysis_Entropy - Fatal编程技术网

Python 互信息重要性水平

Python 互信息重要性水平,python,dependencies,data-analysis,entropy,Python,Dependencies,Data Analysis,Entropy,我有一个包含21个变量和75个数据点/行的数据集。我正试图调查每对变量之间的相互信息,我是统计学方面的新手。我在sklearn.metrics中使用了mutual_info_score函数,它返回一个大于0的数字。我如何知道相互信息分数的哪些值反映了依赖性。例如,您如何知道是只探索1及以上的值,还是2及以上的值等等。互信息是一种衡量标准 import numpy as np from sklearn.metrics import mutual_info_score np.random.seed

我有一个包含21个变量和75个数据点/行的数据集。我正试图调查每对变量之间的相互信息,我是统计学方面的新手。我在sklearn.metrics中使用了mutual_info_score函数,它返回一个大于0的数字。我如何知道相互信息分数的哪些值反映了依赖性。例如,您如何知道是只探索1及以上的值,还是2及以上的值等等。

互信息是一种衡量标准

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
你想探索的是使用一个零假设检验——不管两个变量是否相依。无效假设==独立性

您可以使用独立性测试,例如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值大于阈值,我们不能拒绝零假设

谢谢你的回复。我理解第一位所做的,只是找到两组变量之间的互信息分数。然而,其他人似乎使用卡方检验作为依赖性的检验,但我的意思是使用互信息作为依赖性的度量,如果这有意义的话,作为某种截止点。我不明白所有变量对的最后一位是如何使用互信息的?其次,我遇到了将数据集添加到最后一部分并用数据变量替换它的问题,因为我的数据不仅仅是整数值。1。任何切断都是任意的。顺便说一句,如果你能证明你选择的截止线是正确的,那么使用这种方法是没有问题的。2.如果您有特定类型的数据,您可以探索支持此类数据的独立性测试。例如,您可以检查HSIC Hilbert-Schimidt独立性标准,在这里您可以定义两个值之间的接近度。如果你没问题,你可以用皮尔逊相关系数的绝对值,等等。