首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >互信息python意义级

互信息python意义级
EN

Stack Overflow用户
提问于 2017-07-18 14:14:22
回答 1查看 1.5K关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2017-07-18 14:35:13

相互信息是一种衡量标准。

代码语言:javascript
复制
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))

即使有两个独立的随机标签,你也会看到非零的相互信息,

代码语言:javascript
复制
0.117333093974

你想要探讨的是使用一个零假设检验--两个变量是否是相依的。(零假设==独立性)

你可以使用一个独立测试,例如chi2在科学学习中,

代码语言:javascript
复制
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')

对于所有的变量,

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45169345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档