皮尔逊积矩相关系数的学习
皮尔逊积矩相关系数的学习
做相似度计算的时候经常会用到皮尔逊相关系数(Pearson Correlation Coefficient),那么应该如何理解该系数?其数学本质、含义是什么?
皮尔逊相关系数理解有两个角度
一、以高中课本为例,将两组数据首先做Z分数处理之后,然后两组数据的乘积和除以样本数。
Z分数一般代表正态分布中数据偏离中心点的距离。等于变量减掉平均数再除以标准差。标准差则等于变量减掉平均数的平方和再除以样本数最后再开方。所以我们可以将公式依次精简为:
以下为python的实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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的实现:
1
2
3
|
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之间),另一个是独立样本检验系数,用来检验样本一致性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!