相似度計算方法

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章