相关性检验之Pearson系数及python实现

标签:
数据分析师数据挖掘python |
一、Pearson相关系数
皮尔森相关系数是用来反应俩变量之间相似程度的统计量,在机器学习中可以用来计算特征与类别间的相似度,即可判断所提取到的特征和类别是正相关、负相关还是没有相关程度。
Pearson系数的取值范围为[-1,1],当值为负时,为负相关,当值为正时,为正相关,绝对值越大,则正/负相关的程度越大。若数据无重复值,且两个变量完全单调相关时,spearman相关系数为 1或-1。当两个变量独立时相关系统为0,但反之不成立
Pearson相关系数的计算方法有三种形式,如下列公式所示
http://www.cda.cn/uploadfile/image/20180125/20180125084645_76684.png
http://www.cda.cn/uploadfile/image/20180125/20180125084645_34494.png
http://blog.csdn.net/xzfreewind/article/details/73550856
其中X,Y代表两个特征数组, , 为X,Y特征的平均值。对于第一种形式的Pearson表示,可以看做是两个随机变量中得到的样本集向量之间夹角的cosine函数。
二、Python代码实现
在这里主要实现了第一种Pearson形式的代码,代码分为三个模块,第一个模块的功能是来获取两个向量的平均值;第二个模块的功能实现的是求两个向量间的pearson系数,返回pearson系数;最后一个模块是来求取所有特征和类的相似程度
-
#计算特征和类的平均值
-
ef
calcMean(x,y): -
sum_x = sum(x) -
sum_y = sum(y) -
n = len(x) -
x_mean = float(sum_x 0.0)/n -
y_mean = float(sum_y 0.0)/n -
return x_mean,y_mean
-
#计算Pearson系数
-
def
calcPearson(x,y): -
x_mean,y_mean = calcMean(x,y) #计算x,y向量平均值 -
n = len(x) -
sumTop = 0.0 -
sumBottom = 0.0 -
x_pow = 0.0 -
y_pow = 0.0 -
for i in range(n): -
sumTop = (x[i]-x_mean)*(y[i]-y_mean) -
for i in range(n): -
x_pow = math.pow(x[i]-x_mean,2) -
for i in range(n): -
y_pow = math.pow(y[i]-y_mean,2) -
sumBottom = math.sqrt(x_pow*y_pow) -
p = sumTop/sumBottom -
return p
-
#计算每个特征的spearman系数,返回数组
-
def
calcAttribute(dataSet): -
prr = [] -
n,m = shape(dataSet) #获取数据集行数和列数 -
x = [0] * n #初始化特征x和类别y向量 -
y = [0] * n -
for i in range(n): #得到类向量 -
y[i] = dataSet[i][m-1] -
for j in range(m-1): #获取每个特征的向量,并计算Pearson系数,存入到列表中 -
for k in range(n): -
x[k] = dataSet[k][j] -
prr.append(calcSpearman(x,y)) -
return prr
三、样例演示
这里有一个1162*22的数据集,如下图所示,前21列表示特征,第22列表示类别。该数据集是一个二分类问题。
http://www.cda.cn/uploadfile/image/20180125/20180125084721_31116.png
对于每个特征,调用上述函数,得出的每个特征的pearson系数如下图所示。根据得到的结果,对于特征选择就有一定的依据啦~
http://www.cda.cn/uploadfile/image/20180125/20180125084721_20741.png