推薦系統(1)-計算歐式距離分數
阿新 • • 發佈:2019-01-01
計算歐式距離分數
歐式距離分數:代表一種相似度指標,可以計算兩個資料點之間的歐幾里得距離
以電影推薦系統為例 程式碼如下:
# -*- coding:utf-8 -*-
'''
計算歐式距離分數
'''
import json
import numpy as np
# 定義一個計算兩個使用者之間歐幾里得距離的函式 user1和user2
def euclidean_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
# 如果兩個使用者均沒評分過,則得分為0
if len(rated_by_both)==0:
return 0
# 計算平方和的平方根 並將其歸一化 使得評分取值在0-1之間
squared_difference = []
for item in dataset[user1]:
if item in dataset[user2]:
squared_difference.append(np.square(dataset[user1][item]-dataset[user2][item]))
return 1/(1+np.sqrt(np.sum(squared_difference)))
# 載入資料檔案中的json格式檔案
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 euclidean_score(data,user1,user2)
輸出結果如下:
歐幾里得距離分數:
1.0