1 皮爾遜相關係數
Pearson 相關係數是用協方差除以兩個變量的標準差得到的,雖然協方差能反映兩個隨機變量的相關程度(協方差大於0的時候表示兩者正相關,小於0的時候表示兩者負相關),但其數值上受量綱的影響很大,不能簡單地從協方差的數值大小給出變量相關程度的判斷。爲了消除這種量綱的影響,於是就有了相關係數的概念。
當兩個變量的方差都不爲零時,相關係數纔有意義,相關係數的取值範圍爲[-1,1]。《數據挖掘導論》中給了一個很形象的圖來說明相關度大小與相關係數之間的聯繫:
由上圖可以總結,當相關係數爲1時,成爲完全正相關;當相關係數爲-1時,成爲完全負相關;相關係數的絕對值越大,相關性越強;相關係數越接近於0,相關度越弱。
python 實現
def pearson(self,rating1,rating2):
sum_xy = 0
sum_x = 0
sum_y = 0
sum_x2 = 0
sum_y2 = 0
num = 0
for key in rating1.keys():
if key in rating2.keys():
num += 1
x = rating1[key]
y = rating2[key]
sum_xy += x * y
sum_x += x
sum_y += y
sum_x2 += math.pow(x,2)
sum_y2 += math.pow(y,2)
if num == 0:
return 0
# 皮爾遜相關係數分母
denominator = math.sqrt( sum_x2 - math.pow(sum_x,2) / num) * math.sqrt( sum_y2 - math.pow(sum_y,2) / num )
if denominator == 0:
return 0
else:
return ( sum_xy - ( sum_x * sum_y ) / num ) / denominator