在前兩篇 、 中,簡單分享了熱度推薦、協同過濾、內容推薦的算法概述,以及基於用戶協同過濾算法的Python實現。此篇主要分享基於物品的協同過濾算法Python實現。
基於物品的協同過濾算法概述
協同過濾:可以簡單理解為"人以群分"的算法解釋,通過海量數據中人的歷史行為,計算物品的相似度,然後將與你喜歡物品的相似物品推薦給你。
![頭條推薦算法——協同過濾、內容推薦算法介紹與Python實現(三)](http://p2.ttnews.xyz/loading.gif)
基於物品的協同過濾
上圖示意出基於物品的協同過濾推薦機制的基本原理,假設Charles喜歡文章A/B,用戶Mark喜歡文章A/C,Bill喜歡文章B,從這些用戶的歷史喜好記錄中,我們可以發現喜歡文章A的人都喜歡文章B,因此文章A與文章B比較類似,那麼我們可以推斷Bill很有可能也喜歡文章A,所以系統會將文章A推薦給Bill。
相似度的幾種度量方式
此篇中只應用相對常見的幾種相似度度量算法,如歐幾里得距離、皮爾遜相似度、餘弦相似度。這幾種度量方法的區別可以看下我的另一篇文章 。其中皮爾遜相似度可以簡單的看做是升級版本的歐幾里得度量算法,因為它提供了對於變量度量單位不同的處理步驟。因此對不同變量間的取值範圍沒有要求。是以擬合的方法來判斷兩個數據的相關性,和歐式方法相比更適合數據不是很規範的情況。
歐幾里得距離
![頭條推薦算法——協同過濾、內容推薦算法介紹與Python實現(三)](http://p2.ttnews.xyz/loading.gif)
皮爾遜相似度
餘弦相似度
有興趣的可以瞭解下修正後的餘弦相似度計算方式,主要解決餘弦相似度僅考慮向量維度方向上的相似而沒考慮到各個維度的量綱的差異性,所以在計算相似度的時候,做了每個維度減去均值的修正操作。
基於物品的協同過濾推薦算法實現步驟
- 格式化數據 獲取ratings_dict
轉換成數據ratings_dict表示某個電影的所有用戶的評分集合,並對評分進行歸一化
- 計算所有與movieId有交集的物品相似度
嘗試餘弦相似度度
皮爾遜相似度
歐幾里德距離
- 根據相似度生成推薦電影列表
根據用戶已經觀看的電影,將相似電影推薦給用戶,非關鍵代碼,暫不實現。
基於物品的協同過濾推薦的算法Python實現
格式化數據 獲取ratings_dict
計算所有與movieId有交集的物品相似度
使用不同的相似度度量方法,我們movieid為3016的相似電影如下:
使用餘弦相似度度量的物品相似度結果
['993', '981', '972', '939', '90', '884', '854', '843', '827', '814']
使用歐幾里得距離度量的物品相似度結果
['993', '989', '985', '977', '975', '972', '939', '90', '895', '889']
使用皮爾遜相似度度量的物品相似度結果
['754', '108', '1138', '1743', '3772', '1169', '993', '3119', '3205', '2984']
閱讀更多 測試開發技術棧 的文章