**如下:
#-*- coding:utf-8 -*-
''' 皮爾遜相關係數
'''import json
import numpy as np
# 計算user1 和 user2的相關係數
defpearson_score
(dataset,user1,user2):
if user1 not
in dataset:
raise typeerror('user'+user1+'not present in the dataset')
if user2 not
in dataset:
raise typeerror('user'+user2+'not present in the dataset')
# 提取兩個使用者都評過分的電影
rated_by_both = {}
for item in dataset[user1]:
if item in dataset[user2]:
rated_by_both[item]=1
num_ratings=len(rated_by_both)
# 如果兩個使用者都沒有評分 則說明兩個使用者之間沒有相似度 返回值為0
if num_ratings==0:
return
0# 計算相同評分電影的平方值之和
user1_sum=np.sum([dataset[user1][item] for item in rated_by_both])
user2_sum=np.sum([dataset[user2][item] for item in rated_by_both])
# 計算相同電影的評分的平方和
user1_squared_sum=np.sum([np.square(dataset[user1][item]) for item in rated_by_both])
user2_squared_sum=np.sum([np.square(dataset[user2][item]) for item in rated_by_both])
# 計算資料集的乘積之和
product_sum=np.sum([dataset[user1][item]*dataset[user2][item] for item in rated_by_both])
# 計算皮爾遜相關係數
sxy=product_sum-(user1_sum*user2_sum/num_ratings)
sxx=user1_squared_sum-np.square(user1_sum)/num_ratings
syy=user2_squared_sum-np.square(user2_sum)/num_ratings
# 考慮分母為0的情況
if sxx*syy==0:
return
0# 如果上述正常 返回皮爾遜相關係數
return sxy/np.sqrt(sxx*syy)
if __name__=='__main__':
data_file='movie_ratings.json'
with open(data_file,'r') as f:
# 函式注意...()
data=json.loads(f.read())
user1='john carson'
user2='michelle peterson'
print
'\n 皮爾遜相關係數:'
print pearson_score(data,user1,user2)
輸出結果如下:
皮爾遜相關係數:
0.396059017191
皮爾遜相關係數
皮爾遜相關係數是比歐幾里德距離更加複雜的可以判斷人們興趣的相似度的一種方法。該相關係數是判斷兩組資料與某一直線擬合程式的一種試題。它在資料不是很規範的時候,會傾向於給出更好的結果。公式一 皮爾遜相關係數計算公式 公式二 皮爾遜相關係數計算公式 公式三 皮爾遜相關係數計算公式 公式四 皮爾遜相關係數計...
皮爾遜相關係數 如何理解皮爾遜相關係數和協方差
如果結果為正值,則說明兩者是正相關的,也就是說乙個人身高越高體重越重。如果結果為負值,就說明兩者是負相關。如果為0,則兩者之間沒有關係,身高和體重之間沒有關聯。雖然協方差能反映兩個隨機變數的相關程度 協方差大於0的時候表示兩者正相關,小於0的時候表示兩者負相關 但是協方差值的大小並不能很好地度量兩個...
推薦演算法 皮爾遜相關係數的相似度
基於用的推薦程式的乙個重要的部分是使用者相似度 usersimilarity 實現。基於使用者的推薦非常依賴這個元件。如果對使用者的相似性缺乏可靠有效的定義,這類推薦方法是沒有意義的。這也適用於使用者的推薦的 近親 基於物品的推薦程式,它同樣依賴相似性。皮爾遜相關係數是乙個介於 1和1之間的數,它度...