Top-N Recommendation——基於用戶的推薦實驗

注:
1. 數據集來源 MovieLens
2. 源代碼在末尾附上

一、Introduction


大家無論是在實體商店還是在網絡上,都會有Top-N推薦的情況。基於客戶或者基於商品做出推薦。本實驗基於Movielens、Ratings的電影數據集,對用戶做出Top-N 推薦。主要目的是基於User-Based的思想來進行Top-10的相關電影推薦。


二、Methodology


本實驗基於User-Based 的思路,首先通過Item-based計算電影的相似度,對每部電影都生成一個它與其他電影的相似度的序列(按順序排列),然後從中得到Top-10的電影來作爲該部電影的相關推薦電影集。然後根據用戶歷史行爲從Item-base中選出對應的電影序列,從而產生推薦的電影。
MovieLens中的數據格式如下:

  1::Toy Story (1995)::Animation|Children's|Comedy

1:表示電影ID; Toy Story(1995)表示電影名 ;Animation|Children’s|Comedy :表示標籤
因此可以用一個向量表來表示該電影的信息:
這裏寫圖片描述
附註: 0 表示電影沒有該標籤 , 1 表示電影有該標籤

對每一部電影,計算它與其他電影的相似度,生成一個相似度的有序序列。N部電影生成N個有序序列,因此對每一部電影都有一個單獨的推薦列表。 如:
用戶歷史記錄爲U{movie1,movie3,movie5};假設每一部電影的推薦項爲10,那麼就有3*10=30部電影的推薦(其中可能包含重複的,將重複的電影剔除),然後再按照這些電影的相似度大小排序,選出10部電影推薦給該用戶。這樣就完成了針對用戶歷史行爲的電影推薦。


三、Trading Algorithm


  • Item-Based:
    首先生成一個電影的信息矩陣(N*M),然後對於每一個部電影,使用相似度計算的公式,將該電影與其餘N-1部電影做相似計算,然後再對相似度進行排序,推薦前Top-10的電影。
  • 相似度:
    公式:
    這裏寫圖片描述
    本實驗採用的是Cosine相似度:
    這裏寫圖片描述

    • 原理:多維空間兩點與所設定的點形成夾角的餘弦值。
    • 範圍:【-1,1】,值越大,說明夾角越小,兩點相距越近,相似度就越高。
    • 說明:Cosine相似度被廣泛應用於計算文檔的數據的相似度,本實驗是基於標籤的電影推薦,因此採用了該公式來計算兩個電影之間標籤集的相似度,以此來代表兩部電影的相似度。
  • TF-IDF算法(計算某個標籤對於該電影的權重)
    由於MovieLens裏面的Movie數據只給出了電影的標籤(如下),但是並沒有給出該標籤用戶的點擊量,因此無法對該標籤在本電影中的權重進行計算。因此,本實驗沒有用TF-IDF計算詞頻,確定標籤權重的步驟。

  • User-based
    每一個已有用戶都有一個歷史觀看記錄,根據歷史觀看記錄,來找出推薦的電影集。推薦的依據是Item-based思想產生的推薦序列,每一部電影都有一個推薦序列,如果用戶有User{movie1,movie2,……,movien} n個歷史觀看記錄,原則上說就應該對應着 N個推薦序列。將這N個推薦序列中重複的電影剔除,再按照從高到低的相似度排序,從中選出若干部電影推薦給用戶。這就是User-based算法的思想。

  • 驗證精確度
    爲了驗證推薦的精確度,我們將已有的用戶瀏覽記錄分爲兩部分,80%用來訓練,20%用來評估推薦算法的精確度。
    比如:根據用戶歷史行爲(80%的訓練集),產生的推薦序列爲 Rec{movie1,movie2,movie3,movie4…,movie10},然後,將剩下的的評估集打印出來,與推薦的電影比較,計算相似命中率(由於我們這裏是劃分集合評估,所以命中率指的是與推薦電影的相似度)。
    注:結論部分有說明,採用相似命中率是因爲訓練集與評估集的電影是互斥的,推薦的電影是根據訓練集作爲歷史記錄,評估集作爲檢測推薦算法的精確度。推薦的電影(根據Item-based算法)是從全部集合中選出來推薦的,評估電影只佔全部電影的20%,因此評估的效果並不是很好;其次,用戶*電影矩陣大小爲6040*4000,但是給的評論數據纔有100萬,因此Item-Based算法的推薦序列本來就存在了誤差,故而影響到了User-based推薦序列的精確度。

四、Result


爲了驗證結果,將推薦的電影序列打印出來,爲了便於截圖,此處只給用戶推薦了10部電影。而且用於評估的電影,我們只選取了相似命中率最高(也就是在評估的電影集合中與推薦序列最吻合的那一部)的那一部電影來驗證相似命中率。
在這裏我們隨機選取了三部個用戶,將其電影的Top-10推薦以及它的相似度打印出來,以便分析比較。

User1:
這裏寫圖片描述

User2:
這裏寫圖片描述

User3:
這裏寫圖片描述


五、Conclusion


結果證明,對於每一個用戶,都輸出了一個推薦序列,而且按照相似度排列的Top-N推薦。列如, User3:用於評估推薦相似命中率的電影序列有10部,該用戶的T推薦列表也有10部,從結果來看相似命中率並不是很高。

  • 存在的問題:命中率較低
  • 問題分析與方案
    • 第一,實驗的數據比較少,訓練集得到的模型並不可靠;
    • 第二,本實驗評估的是用戶觀看的電影與推薦列表的電影的相似度,用於評估的電影是取用戶瀏覽數據的後20%數據,數據沒有隨機性;
    • 第三,由於用於評估的電影與訓練集電影不同,因此評估的電影沒有重複性(也就是說,訓練集的電影在評估集中不能出現,所以評估的電影無法命中,故本實驗採用的是相似命中率通過標籤的相似度來評估推薦電影的準確率),所以實驗的精確度依賴於評估集合中電影的標籤與推薦電影標籤的相似度(與用戶行爲相關度不是很大)。因此對於一個用戶,生成的推薦序列與評估電影序列,相似命中率不是很高。

總體來說,本實驗基於User-based思想,以前面的Item-based實驗數據的結果,通過相似度計算,生成針對於用戶的top-N 推薦序列。雖然數據上的準確度,但是總體上還是完成了推薦的目的。

點擊此處下載源代碼

發佈了54 篇原創文章 · 獲贊 44 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章