基于协同过滤算法和内容推荐算法实现电影推荐系统
基于協同過濾算法和內容推薦算法實現電影推薦系統
本電影推薦系統算法是基于人人相似的協同過濾算法和基于內容的推薦算法相結合的混合推薦算法
混合推薦算法大致流程:
首先對數據集使用人人相似的協同過濾算法, 計算每個人與其他人的cos相似度, 選擇相似度最高的人,推薦他看過的電影. 若最高相似度小于0.2則認為沒有人與之相似, 改為采用基于內容的推薦算法解決. 若相似度最高的用戶沒有評分過4分的電影可推薦, 也采用基于內容的推薦算法進行推薦.
人人相似的協同過濾算法:
根據movieId合并movies.csv和ratings.csv,得到merged.csv
讀取merge.csv獲取data字典, 格式為{userid:{movieid:rating, movieid:rating}}
修正data字典, 具體為計算每部電影平均分, 將該電影的所有評分減去平均分, 使得該電影的未評價用戶的默認評分為0, 以便于計算
對于每個用戶, 計算他與其他所有用戶的cos相似度, 記錄最高相似度的用戶和兩個用戶的相似度, 最后獲得最高相似度的用戶列表
將與該用戶相似度最高的用戶的電影進行排序, 并與該用戶的電影進行比較, 選擇該用戶未看過且評分大于4的電影推薦給該用戶
如果出現最高相似度小于0.2, 或者最高相似度的用戶沒有電影可以推薦時, 采用基于內容的推薦算法
基于內容的推薦算法
獲取三種數據結構, 用戶標簽喜愛度列表, 不同標簽的電影的評分排序以及每一部電影的種類
用戶標簽喜愛度列表:
標簽喜愛度計算公式=所在電影的原始權重所在電影的用戶評分時間加權
其中, 所在電影原始權重=1/該電影的標簽數
? 時間加權=時間戳的歸一化
不同標簽的電影的評分排序: 評分是指每一部電影的平均分
數據結構: {tag:[ (movieId, rating), (movieId, rating) ]}
每一部電影的種類:
數據結構: { movieId: { tag:ratio, tag:ratio }}
獲取每個用戶標簽喜愛度排名前兩名的標簽和它們的權重, 根據權重計算該標簽推薦的電影數, 在不同標簽的電影評分排序這個數據結構中找到該標簽下排名前幾名的電影進行推薦
代碼下載: 電影推薦系統
總結
以上是生活随笔為你收集整理的基于协同过滤算法和内容推荐算法实现电影推荐系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调用Microsoft.Jet.OLED
- 下一篇: 一起学windows phone7开发(