1. 程式人生 > >推薦系統(1)-計算歐式距離分數

推薦系統(1)-計算歐式距離分數

計算歐式距離分數

歐式距離分數:代表一種相似度指標,可以計算兩個資料點之間的歐幾里得距離

以電影推薦系統為例 程式碼如下:

# -*- 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