import numpy as np
import pandas as pd
data=pd.DataFrame()
data['x']=list(range(1,100))
data['y']=list(range(1,100))
data['logy']=np.log(data.y.values)
data.corr('pearson')





机器学习中Person相关系数矩阵 pearson相关系数矩阵_spearman相关系数


pearson相关系数实际上考察的是线性相关性,简单来说就是两个特征一个作为横坐标一个作为纵坐标之后画出来的图形要是线性方程的形式,


机器学习中Person相关系数矩阵 pearson相关系数矩阵_spearman相关系数_02


但是如果二者是非线性关系,则pearson则无法衡量其正相关关系。


机器学习中Person相关系数矩阵 pearson相关系数矩阵_取值_03


但是对于决策树或者gbdt来说,特征之间是线性或者非线性其实并不重要,重要的是相对排序性,举个例子,比如特征A[0.1,0.01,0.001,0.0001],特征B[4,3,2,1],二者的相关系数是不高的,但是对于tree系列算法来说这两个特征是等价的,因为树是基于排序进行分裂的,所以实际上我们对原始特征进行rank之后基本是没有区别的,因此,一般来说我们在进行特征选择的时候计算使用的是spearman 相关系数而不是pearson,即排序相关性。


但是实际上应用过程中存在另一种特殊的情况,就是数据的数量很少的情况下,spearman有时候无法捕捉到线性相关性。


机器学习中Person相关系数矩阵 pearson相关系数矩阵_特征选择_04


我们通过计算秩相关得到的结论是这三个特征之间不存在相关性。

但是:


机器学习中Person相关系数矩阵 pearson相关系数矩阵_spearman相关系数_05


使用pearson相关系数确得出有两个特征严格相关的原因。

主要是因为:


机器学习中Person相关系数矩阵 pearson相关系数矩阵_机器学习中Person相关系数矩阵_06


机器学习中Person相关系数矩阵 pearson相关系数矩阵_机器学习中Person相关系数矩阵_07


可以看到,这两个特征的取值一一对应并且组成恰好仅仅四个样本点,此时pearson相关系数却可以捕捉到这样的相关性。


机器学习中Person相关系数矩阵 pearson相关系数矩阵_spearman相关系数_08


机器学习中Person相关系数矩阵 pearson相关系数矩阵_机器学习中Person相关系数矩阵_09


机器学习中Person相关系数矩阵 pearson相关系数矩阵_取值_10


机器学习中Person相关系数矩阵 pearson相关系数矩阵_特征选择_11


通过详细测试,二者确实有非常强的相关性。

实际上对于这种连续特征,但是取值很少仅有四个取值,使用pearson或者spearman来计算都没有统计显著性,应该根据使用计算类别特征的相关系数来衡量,不过pearson的好处在于可以捕捉到这种很小级别的线性相关性,所以,以后给gbdt做特征选择的时候记得两种相关系数的手段都试试。