python3機器學習經典實例-第五章構建推薦引擎25
計算歐氏距離分數
現在已經有了充足的機器學習流水線和最近鄰分類器的背景知識,下面可以開始推薦引擎的探討了。為了構建一個推薦引擎,需要定義相似度指標,以便找到與資料庫中特定用戶相似的用戶。歐氏距離分數就是一個這樣的指標,可以計算兩個數據點之間的歐幾里得距離。下面將重點討論電影推薦引擎。接下來學習如何計算兩個用戶間的歐幾里得分數。
- 創建euclidean_score.py文件,載入必要的資料庫;
import jsonimport numpy as np
- 定義一個用於計算兩個用戶之間的歐幾里得分數的函數。第一步先判斷用戶是否在資料庫中出現
# Returns the Euclidean distance score between user1 and 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)
- 為了計算分數,需要提取兩個用戶均評過分的電影
# Movies rated by both user1 and user2 rated_by_both = {} for item in dataset[user1]: if item in dataset[user2]: rated_by_both[item] = 1
- 如果沒有兩個用戶共同評過分的電影,則說明這兩個用戶之間沒有相似度(至少根據資料庫中的評分信息無法計算出來):
# If there are no common movies, the score is 0 if len(rated_by_both) == 0: return 0
- 對於每個共同評分,只計算平方和的平方根,並將該值歸一化,使得評分取值在0到1之間:
squared_differences = [] for item in dataset[user1]: if item in dataset[user2]: squared_differences.append(np.square(dataset[user1][item] - dataset[user2][item])) return 1 / (1 + np.sqrt(np.sum(squared_differences)))
如果評分相似,那麼平方和的差別就會很小,因此評分就會變得很高,這也是我們希望指標達到的效果。
- 載入數據文件中的movie_ratings.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 ("
Euclidean score:") print (euclidean_score(data, user1, user2) )
結果輸出out
Euclidean score:0.29429805508554946
推薦閱讀:
※Windows7 Anaconda環境下xgboost的安裝配置
※全面梳理:準確率,精確率,召回率,查准率,查全率,假陽性,真陽性,PRC,ROC,AUC,F1
※3.機器學習演算法應用---演算法選擇
※重磅乾貨-Richard S. Sutton-2018年強化學習教程免費下載
※更加智能的決策樹:回歸樹