赞
踩
import numpy as np
from scipy.stats importpearsonr
np.random.seed(0)
size = 300
x = np.random.normal(0,1, size)
print "Lowernoise", pearsonr(x, x + np.random.normal(0, 1, size))
print "Highernoise", pearsonr(x, x + np.random.normal(0, 10, size))
Lower noise (0.71824836862138386,7.3240173129992273e-49)Higher noise (0.057964292079338148, 0.31700993885324746)
Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。
x = np.random.uniform(-1, 1, 100000)
print pearsonr(x, x**2)[0]
-0.00230804707612
想把互信息直接用于特征选择其实不是太方便:1、它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;2、对于连续变量的计算不是很方便(X和Y都是集合,x,y都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。
最大信息系数克服了这两个问题。它首先寻找一种最优的离散化方式,然后把互信息取值转换成一种度量方式,取值区间在[0,1]。 minepy 提供了MIC功能。
反过头来看y=x^2这个例子,MIC算出来的互信息值为1(最大的取值)。
from minepy import MINE
m = MINE()
x = np.random.uniform(-1, 1, 10000)
m.compute_score(x, x**2)
print m.mic()
1.0
MIC的统计能力遭到了 一些质疑 ,当零假设不成立时,MIC的统计就会受到影响。在有的数据集上不存在这个问题,但有的数据集上就存在这个问题
from scipy import spatial
x=np.random.uniform(-1,1,1000)
spatial.distance.correlation(x,x**2)
0.99133695904559382
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。