皮爾遜積矩相關系數的學習
做相似度計算的時候經常會用到皮爾遜相關系數(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之間),另一個是獨立樣本檢驗系數,用來檢驗樣本一致性。