百度電影推薦系統比賽 小結 ——記我的初步推薦算法實踐


前一陣子參加了百度的電影推薦系統創新比賽。http://openresearch.baidu.com/activitycontent.jhtml?channelId=284 。 之前沒有實現過推薦算法,想趁這次機會鍛煉一下。雖然成績並不好,RMSE只有0.6214,沒有擠進前30。

任務描述:從用戶的歷史評分數據:userid,movieid,rating, 即用戶對某個電影的評分,預測用戶將會對一個未評分的電影打多少分。主辦方還提供了用戶的朋友關系,電影的類別等信息,但是這些我都沒用上(原因最后分析),所以就只關心用戶的歷史行為數據。

    這是一個評分預測問題。主要有兩種途徑:1 協同過濾 和 2 基於內容的過濾。 其中協同過濾用的最多,我也只實現了它。下面都是協同過濾的算法。

1 User-based collaborative filtering  基於用戶的協同過濾

   用戶u和用戶v有各自的評分記錄 rating_list, 基於這個歷史評分記錄,我們可以計算u和v的相似度。相似度的計算公式有很多種,比如余弦相似度、皮爾森相似度等。(具體的公式可以網上搜)。我使用的是自己改進的公式(因為自己覺得比較靠譜):

   

其中N(u)指u評過分的電影集合。dis就是指兩個評分的絕對值差。因為電影評分都是1~5之間的,比如u評分5,v評分4,那么dis就是1, 2-1=1, 對w_uv有1的正分貢獻。除以Log(1+N(i))的原因:如果電影很流行,比如泰坦尼克號,大家都看,那么對u和v的相似度影響應該小;相反,如果看過電影i的人很少,比如電梯里的惡魔,那么i對u和v用戶的影響就應該更大。

   現在有了用戶之間的相似度關系。要預測用戶u對電影i的評分。取出所有對i評過分的用戶。從中取出相似度最高的K個用戶,以他們的打分做加權平均,得到的分數就是對用戶u的預測。所以有些人也把這種算法稱為“基於鄰居”的預測。(knn) 

技巧:  做加權平均的時候,權值一般設為相似度w。但是有學者認為權值要經過訓練估計,得到的結果比較好。“Modeling relationships at multiple scales to improve accuracy of large recommender systems”

結果: RMSE = 0.6638

2 Item-based collaborative filtering  基於物品的協同過濾

  和user-based思路基本一樣,只不過,剛才是計算用戶之間的相似度,現在換成計算電影間的相似度。有點類似對偶問題。

  效果:RMSE=0.6483  

  點評:據經驗總結,Item-based 的效果比user-based好,而且占內存小。因為電影的數量要比用戶的數量少很多。

把 user-based 和item-based的結果加權:  RMSE= 0.6343

 

3  SVD和pmf

下面就談談最流行的矩陣分解途徑吧。  參考的是兩篇論文"matrix factorization techniques for recommender systems" 和 "Probabilistic matrix factorization" 

把用戶-電影 評分看成一個矩陣,rui 表示u對電影i的評分。這個矩陣是很稀疏的,很多元素都缺失。一般來說填充率不到1%。然后假定每個用戶u都有一個D維的向量,表示他對不同風格的電影的偏好,每個電影i也有一個D維的向量表示不同風格的用戶對它的偏好。 於是電影的評分矩陣可以這樣來估計:

   

p 和q就是D維的向量。用梯度下降法訓練p和q,迭代幾十次就收斂了。但是這樣的SVD很容易就過擬合,所以需要加一些約束。具體的約束請看那兩篇論文,這里只將一種:要優化的目標函數變為:

對它求導,可以發現每次迭代的時候,p和q的更新公式變成:

加入了一些約束之后,就可以避免過擬合。或許有些人不知道什么是過擬合的后果,這里順便也把圖貼上來:

虛線的線,前期RMSE下降的很快,后來又上升了,成V型,就是過擬合的表現了。

還有一種 bayesian probabilistic matrix factorization(http://www.utstat.toronto.edu/~rsalakhu/BPMF.html), 效果很贊,有源碼,可以直接使用。

效果: RMSE= 0.6302

4 后處理

主要針對特殊用戶。 1 是評分很少的用戶,比如評分數只有7個以下的。經統計這些用戶的評分,猜測這些人是精心挑選好電影看的,所以給他們的打分直接設成平均分多一分。

2 是評分一直很穩定的用戶。有兩種情況,一種是電影托,第二是用戶比較隨意,隨意給分的。所以對他們的結果,直接預測為他們歷史的平均值。

5  各種算法的加權平均

最后把幾種算法的結果加權平均起來,RMSE=0.6214。 前netflix冠軍隊是整合了他們的108個模型的結果,對此我只能呵呵了。"the BellKor solution to the Netflix Prize"

 

最后,因為是我第一次參加推薦系統的實踐,很多經驗都不足,希望能多和大家交流切磋。時間比較玩了,擔心樓管會鎖門,文章可能寫的比較膚淺。持續更新。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM