代碼來源於: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