加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2018-01-26 10:33:08)
标签:

数据分析师

数据挖掘

python

相关性检验之Pearson系数及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系数;最后一个模块是来求取所有特征和类的相似程度


[python]view plaincopy
  1. #计算特征和类的平均值  
  2. ef calcMean(x,y):  
  3.    sum_x sum(x)  
  4.    sum_y sum(y)  
  5.    len(x)  
  6.    x_mean float(sum_x 0.0)/n  
  7.    y_mean float(sum_y 0.0)/n  
  8.    return x_mean,y_mean  


[python]view plaincopy
  1. #计算Pearson系数  
  2. def calcPearson(x,y):  
  3.     x_mean,y_mean calcMean(x,y)   #计算x,y向量平均值  
  4.     len(x)  
  5.     sumTop 0.0  
  6.     sumBottom 0.0  
  7.     x_pow 0.0  
  8.     y_pow 0.0  
  9.     for in range(n):  
  10.         sumTop (x[i]-x_mean)*(y[i]-y_mean)  
  11.     for in range(n):  
  12.         x_pow math.pow(x[i]-x_mean,2)  
  13.     for in range(n):  
  14.         y_pow math.pow(y[i]-y_mean,2)  
  15.     sumBottom math.sqrt(x_pow*y_pow)  
  16.     sumTop/sumBottom  
  17.     return  
[python]view plaincopy
  1.   
[python]view plaincopy
  1. #计算每个特征的spearman系数,返回数组  
  2. def calcAttribute(dataSet):  
  3.     prr []  
  4.     n,m shape(dataSet)    #获取数据集行数和列数  
  5.     [0]             #初始化特征x和类别y向量  
  6.     [0]  
  7.     for in range(n):      #得到类向量  
  8.         y[i] dataSet[i][m-1]  
  9.     for in range(m-1):    #获取每个特征的向量,并计算Pearson系数,存入到列表中  
  10.         for in range(n):  
  11.             x[k] dataSet[k][j]  
  12.         prr.append(calcSpearman(x,y))  
  13.     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


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有