皮尔森相关系数是一种最简单的反应特征和响应之间关系的方法。
这个方法衡量的是变量之间的线性相关性。
结果的取值区间为[-1,1]。-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。
皮尔森相关系数有一个明显的缺陷就是,它只对线性关系敏感。如果关系是非线性的,哪怕两个变量之间是一一对应的关系,皮尔森相关系数也可能接近0.
from pandas import read_csv
import numpy as np
from scipy.stats import pearsonr
def PearsonrCorrelation():
tps = read_csv('E:\workfile\data\trade\tps.csv', header=0)
label = np.array(tps)[:, 0]
feature = np.array(tps)[:, 1:]
for i in range(0, len(feature[0])):
print("第'%i'属性的皮尔森相关系数为" % (i+1), pearsonr(label, feature[:, i]))
image.png
这是我的代码和数据的运行结果。
还是依照惯例,跟进去看一下源码和说明文字。
image.png
上面的说明信息,皮尔森相关系数描述的是线性关系。严格来说,需要数据集是正态分布的,但不必是零均值的。
从代码里可以看出来,只能计算两组数据之间的皮尔森相关系数,不能批量计算。
image.png
image.png
返回值的第一项是皮尔森相关系数,第二项是p_value值。一般来说皮尔森相关系数越大,p_value越小,线性相关性就越大。但是看到note里讲的。p_value不是完全的可靠,当数据量大于500的时候,可能是合理的。
网友评论
1. 二维正态分布的概率密度函数里面有ρ,就是这个皮尔逊相关系数。也就是0, 1分布的特征不能用。
2. 皮尔逊相关系数还受到异常值影响,当然是特殊情况。
3. 那么两个特征是否真的线性相关?可以画个图。有没有更牛的算法来验证非线性情况呢?