皮尔逊积矩相关系数的学习
做相似度计算的时候经常会用到皮尔逊相关系数(Pearson Correlation Coefficient),那么应该如何理解该系数?其数学本质、含义是什么?
皮尔逊相关系数理解有两个角度
一、以高中课本为例,将两组数据首先做Z分数处理之后,然后两组数据的乘积和除以样本数。
Z分数一般代表正态分布中数据偏离中心点的距离。等于变量减掉平均数再除以标准差。标准差则等于变量减掉平均数的平方和再除以样本数最后再开方。所以我们可以将公式依次精简为:
以下为python的实现:
from math import sqrt
#返回p1和p2的皮尔逊相关系数
def sim_pearson(prefs,p1,p2):
#得到双方曾评价过的物品列表
si = {}
for item in prefs[p1]:
if item in prefs[p2]:
si[item] = 1
#得到列表元素个数
n = len(si)
#如果两者没有共同之处,则返回1
if not n:
return 1
#对所有偏好求和
sum1 = sum([perfs[p1][it] for it in si])
sum2 = sum([perfs[p2][it] for it in si])
#求平方和
sum1Sq = sum([pow(prefs[p1][it],2) for it in si])
sum2Sq = sum([pow(prefs[p2][it],2) for it in si])
#求乘积之和
pSum = sum([prefs[p1][it] * prefs[p2][it] for it in si])
#计算皮尔逊评价值
num = pSum -(sum1 * sum2 / 2)
den = sqrt((sum1Sq - pow(sum1,2) / n) * (sum2Sq - pow((sum2,2) / 2)))
if not den:
return 0
r = num/den
return r二、 按照大学的线性数学水平来理解,它比较复杂一点可以看做是两组数据的向量夹角的余弦。

对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。
1、n个数值组成的行(x1, x2, x3,… xn)称为n维向量简记为大写字母X
|X| = √x12+x22+x32+…+xn2 定义为向量X的模,向量X与Y的内积为: X·Y=x1*y1+x2*y2+..xn*yn
2、向量X及Y的向量夹角余弦按照下式计算:
X·Y
cosθ =
|X|×|Y|
3、向量夹角余弦约接近1说明两向量相似度越高。
以下为Python的实现:
import math,numpy
def cosine_distance(u, v):
return numpy.dot(u, v) / (math.sqrt(numpy.dot(u, u)) * math.sqrt(numpy.dot(v, v)))从以上解释,也可以理解皮尔逊相关的约束条件:
两个变量间有线性关系
变量是连续变量
变量均符合正态分布,且二元分布也符合正态分布
两变量独立
在实践统计中一般只输出两个系数,一个是相关系数也就是计算出来的相关系数大小(在-1到1之间),另一个是独立样本检验系数,用来检验样本一致性。
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:标点符 来源: 标点符
- 标签: 皮尔逊积矩
- 发布时间:2013-01-10 22:21:23
-
[927] WordPress插件开发 -- 在插件使用 -
[133] 解决 nginx 反向代理网页首尾出现神秘字 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 整理了一份招PHP高级工程师的面试题 -
[50] 全站换域名时利用nginx和javascri -
[50] 海量小文件存储 -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] Innodb分表太多或者表分区太多,会导致内 -
[47] jQuery性能优化指南
