⽪尔逊相关系数(PearsonCorrelationCoefficient)理解⽪尔逊相关系数的,并了解其数学本质和含义
⽪尔逊相关系数的百度百科定义: 在统计学中,⽪尔逊相关系数( Pearson correlation coefficient),⼜称⽪尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称 PPMCC或PCCs),是⽤于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。
本⽂主要参考,搬运⾃:
也可参考这个,其中有⽤python实现⽪尔逊相关系数:
此处有php版本的实现:
简单的相关系数的分类:
0.8-1.0 极强相关
0.6-0.8 强相关
0.4-0.6 中等程度相关
0.2-0.4 弱相关
0.0-0.2 极弱相关或⽆相关
⽪尔逊相关系数理解有两个⾓度:
⾓度⼀:
按照⾼中数学⽔平来理解,它很简单,可以看做将两组数据⾸先做Z分数处理之后,然后两组数据的乘积和除以样本数。
Z分数⼀般代表正态分布中,数据偏离中⼼点的距离.等于变量减掉平均数再除以标准差。(就是⾼考的标准分类似的处理)。
标准差则等于变量减掉平均数的平⽅和,再除以样本数,最后再开⽅。
根据以上理解可将公式简化为:
⽪尔逊相关系数就是两个变量协⽅差除以两个变量标准差乘积:
协⽅差是⼀个反映两个随机变量相关程度的指标(协⽅差⼤于0的时候表⽰两者正相关,⼩于0的时候表⽰两者负相关),但是协⽅差值的⼤⼩并不能很好地度量两个随机变量的关联程度,值的⼤⼩受到两个变量量纲的影响,不适合⽤于⽐较。为了更好的度量两个随机变量的相关程度,引⼊了Pearson相关系数,其在协⽅差的基础上除以了两个随机变量的标准差,消除了量纲的影响。
⾓度⼆:gre机经
按照⼤学的线性数学⽔平来理解,它⽐较复杂⼀点,可以看做是两组数据的向量夹⾓的余弦。
⽪尔逊相关的约束条件:
余下1. 两个变量间有线性关系
2. 变量是连续变量
3. 变量均符合正态分布,且⼆元分布也符合正态分布
4. 两变量独⽴
在实践统计中,⼀般只输出两个系数,⼀个是相关系数,也就是计算出来的相关系数⼤⼩,在-1到1之间;另⼀个是独⽴样本检验系数,⽤来检验样本⼀致性。
⽰例(维基百科中的例⼦):
好听的英文名字女生例如: 假设五个国家的国民⽣产总值分别是1、2、3、5、8(单位10亿美元),⼜假设这五个国家的贫困⽐例分别是11%、12%、13%、15%、18%。
创建2个向量(R语⾔):
x<-c(1,2,3,5,8)
y<-c(0.11,0.12,0.13,0.15,0.18)
按照维基的例⼦,应计算出相关系数为1出来。我们看看如何⼀步⼀步计算出来的。
x的平均数是:3.8
y的平均数是:0.138
所以:
sum((x-mean(x))*(y-mean(y)))=0.308
⽤数值带⼊计算就是:
(1-3.8)*(0.11-0.138) = 0.0784
(2-3.8)*(0.12-0.138) = 0.0324
(3-3.8)*(0.13-0.138) = 0.0064
(5-3.8)*(0.15-0.138) = 0.0144
(8-3.8)*(0.18-0.138) = 0.1764
0.0784+0.0324+0.0064+0.0144+0.1764 = 0.308
同理,分号下的是:
sum((x-mean(x))^2)=30.8
sum((y-mean(y))^2)=0.00308
⽤数值带⼊计算就是:
(1-3.8)^2 = 7.84 #平⽅
(2-3.8)^2 = 3.24 #平⽅
(3-3.8)^2 = 0.64 #平⽅
(5-3.8)^2 = 1.44 #平⽅
(8-3.8)^2 = 17.64 #平⽅
7.84+3.24+0.64+1.44+17.64 = 30.8
同理,求得:
sum((y-mean(y))^2)=0.00308
再开平⽅根,分别是:
30.8^0.5 = 5.549775
0.00308^0.5 = 0.05549775
⽤分⼦除以分母,就计算出最终结果:
0.308/(5.549775*0.05549775) = 1
⽰例(R语⾔中的例⼦):
初中病句类型假设有100⼈,⼀组数据是年龄,平均年龄是35岁,标准差是5岁;另⼀组数据是发帖数量,平均帖⼦数量是45份post,标准差是8份帖⼦。
假设这两组都是正态分布。我们来求这两者的⽪尔逊相关系数,R脚本如下:
> x<-rnorm(n=100,mean=35,sd=5)#创建⼀组平均数为35,标准差为5,样本数为100的随机数
> y<-rnorm(n=100,mean=45,sd=8)#创建⼀组平均数为45,标准差为8,样本数为100的随机数
> st(x,y,method="pearson")#计算这两组数的相关,并进⾏T检验
R语⾔的输出结果为:
questionedPearson's product-moment correlation
data: x and y
t =-0.0269, df =98, p-value =0.9786
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.19903160.1938019
sample estimates:
cor
-0.002719791
当然,这⾥是随机数。也可以⽤⾮随机的验证⼀下计算。
机器学习中的应⽤
⽪尔森(pearson)相关系数、斯⽪尔曼(spearman)相关系数和肯德尔(kendall)相关系数并称为统计学三⼤相关系数。
spearman和kendall属于等级相关系数亦称为“秩相关系数”,是反映等级相关程度的统计分析指标。
favorpearson是⽤来反应俩变量之间相似程度的统计量,在机器学习中可以⽤来计算特征与类别间的相似度,即可判断所提取到的特征和类别是正相关、负相关还是没有相关程度。
copyPearson相关系数的计算⽅法有三种形式,如下:
python的代码实现公式3:
def pearson(vector1, vector2):
n =len(vector1)
#simple sums
sum1 =sum(float(vector1[i])for i in range(n))
sum2 =sum(float(vector2[i])for i in range(n))
#sum up the squares
sum1_pow =sum([pow(v,2.0)for v in vector1])
sum2_pow =sum([pow(v,2.0)for v in vector2])
#sum up the products
p_sum =sum([vector1[i]*vector2[i]for i in range(n)])
#分⼦num,分母den
num = p_sum -(sum1*sum2/n)
den = math.sqrt((sum1_pow-pow(sum1,2)/n)*(sum2_pow-pow(sum2,2)/n))
if den ==0:
return0.0
return num/den
python实现公式1:
# 计算特征和类的平均值
def 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
combobox
for i in range(n):
cathay pacificsumTop +=(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
# 计算每个特征的Pearson系数,返回数组
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