⽪尔森相关系数(Pearsoncorrelationcoefficient)
概述
定义
物理意义
⽪尔森距离
机器学习中的应⽤
代码实现
概述
⽪尔森相关系数也称⽪尔森积矩相关系数(Pearson product-moment correlation coefficient) ,是⼀种线性相关系数,是最常⽤的⼀种相关系数。记为r,⽤来反映两个变量X和Y的线性相关程度,r值介于-1到1之间,绝对值越⼤表明相关性越强。
logo是什么
定义
总体相关系数ρ定义为两个变量X、Y之间的协⽅差和两者标准差乘积的⽐值,如下:
估算样本的协⽅差和标准差,可得到样本相关系数(即样本⽪尔森相关系数),常⽤r表⽰:
pudong airportr还可以由(Xi,Yi)样本点的标准分数均值估计得到与上式等价的表达式:
其中为Xi样本的标准分数、样本均值和样本标准差,n为样本数量。
物理意义
⽪尔森相关系数反映了两个变量的线性相关性的强弱程度,r的绝对值越⼤说明相关性越强。
当r>0时,表明两个变量正相关,即⼀个变量值越⼤则另⼀个变量值也会越⼤;
当r<0时,表明两个变量负相关,即⼀个变量值越⼤则另⼀个变量值反⽽会越⼩;
当r=0时,表明两个变量不是线性相关的(注意只是⾮线性相关),但是可能存在其他⽅式的相关性(⽐如曲线⽅式);
走进鲁迅
当r=1和-1时,意味着两个变量X和Y可以很好的由直线⽅程来描述,所有样本点都很好的落在⼀条直线上。
⽪尔森距离
通过⽪尔森系数定义:
⽪尔森系数范围为[-1,1],因此⽪尔森距离范围为[0,2]。
机器学习中的应⽤
⽪尔森(pearson)相关系数、斯⽪尔曼(spearman)相关系数和肯德尔(kendall)相关系数并称为统计学三⼤相关系数。其
中,spearman和kendall属于等级相关系数亦称为“秩相关系数”,是反映等级相关程度的统计分析指标。pearson是⽤来反应俩变量之间相似程度的统计量,在机器学习中可以⽤来计算特征与类别间的相似度,即可判断所提取到的特征和类别是正相关、负相关还是没有相关程度。
Pearson相关系数的计算⽅法有三种形式,如下:
⽪尔森相关系数是衡量线性关联性的程度,p的⼀个⼏何解释是其代表两个变量的取值根据均值集中后构成的向量之间夹⾓的余弦。
代码实现
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:
return 0.0
return num/den
消防工程师证报考条件是什么1
2
3
4
5
6
7
8
9
10
11
12
life ntence
13
five的序数词14
15
圣诞节电影>pervert
16
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系数
ocerdef 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):
萌猫snoopy微博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