皮爾遜(Pearson)相關係數 - 公式和代碼實現

代碼來源於:https://github.com/yaleimeng/Final_word_Similarity
我將其單獨抽取、組合出來做講解。

1. 簡介

相關係數:考察兩個變量之間的相關程度。相關係數越大,相關性越強。
皮爾遜相關也稱爲積差相關,是英國統計學家皮爾遜於20世紀提出的一種計算直線相關的方法。

2. 公式

在這裏插入圖片描述
三個公式都能計算正確結果,我們採用第三個公式來編程實現。

3. 代碼實現

from math import sqrt

def multiply(a,b):
    #a,b兩個列表的數據一一對應相乘之後求和
    sum_ab=0.0
    for i in range(len(a)):
        temp=a[i]*b[i]
        sum_ab+=temp
    return sum_ab

def cal_pearson(x,y):
    n=len(x)
    #求x_list、y_list元素之和
    sum_x=sum(x)
    sum_y=sum(y)
    #求x_list、y_list元素乘積之和
    sum_xy=multiply(x,y)
    #求x_list、y_list的平方和
    sum_x2 = sum([pow(i,2) for i in x])
    sum_y2 = sum([pow(j,2) for j in y])
    molecular=sum_xy-(float(sum_x)*float(sum_y)/n)
    #計算Pearson相關係數,molecular爲分子,denominator爲分母
    denominator=sqrt((sum_x2-float(sum_x**2)/n)*(sum_y2-float(sum_y**2)/n))
    return molecular/denominator

if __name__ == '__main__':
    x = [1.0, 0.8413847866522796, 1.0, 1.0, 0.7220196471443738, 0.8659769034282755, 0.8525472520008003, 1.0,
         0.8333703748448211, 0.389905372997432, 0.7323982353899079, 0.7636377912400188, 0.7182768399980969,
         0.2674857649974473, 0.4044950329998137, 0.34512807490538866, 0.18946683500771058, 0.30049731372316213,
         0.24729781155291156, 0.3094230131574097, 0.41238596985736753, 0.0, 0.0, 0.2684506957865521,
         0.14158316440453367, 0.35473275983651914, 0.0, 0.0, 0.0, 0.0]
    y = [0.98, 0.96, 0.96, 0.94, 0.925, 0.9025, 0.875, 0.855, 0.7775, 0.77, 0.7625, 0.7425, 0.7375, 0.705, 0.42, 0.415,
         0.29, 0.275, 0.2375, 0.2225, 0.2175, 0.21, 0.1575, 0.1375, 0.105, 0.105, 0.0325, 0.0275, 0.02, 0.02]
    res = cal_pearson(x,y)
    print(res) # 0.9171284464588204

4. 其他參考資料

如何理解皮爾遜相關係數(Pearson Correlation Coefficient)? - 微調的回答 - 知乎

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