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年強化學習教程免費下載
更加智能的決策樹:回歸樹

TAG:機器學習 | Python |