百度电影推荐系统比赛——初步推荐算法实践

前一阵子参加了百度的电影推荐系统创新比赛。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"

把用户-电影 评分看成一个矩阵,r ui 表示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"

最后,因为是我第一次参加推荐系统的实践,很多经验都不足,希望能多和大家交流切磋。


原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2015-09-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

Yann LeCun:CNN已解决CIFAR-10,目标 ImageNet

1906
来自专栏CDA数据分析师

不可错过的优质深度学习课程

原作者   David Venturi 编译 CDA 编译团队 本文为  CDA 数据分析师原创翻译作品,转载需授权 几乎每天都可以看到深度学习改变日常生活的新...

21010
来自专栏新智元

【名家】王培:仅靠概率论的机器学习无法实现通用智能

【新智元导读】王培认为,贝叶斯解释在通用智能系统中适用性有限,因此仅靠概率论的机器学习方法并不能让计算机拥有可比人脑的智能,概率论虽然是个好东西,但这条路并不能...

2473
来自专栏新智元

荐书 | Christopher Bishop 新书:基于模型的机器学习

【新智元导读】机器学习大牛Christopher Bishop的新书《基于模型的机器学习》近日推出了抢先预览版,用浅显的生活实例介绍了机器学习中的多个经典概念,...

3537
来自专栏大数据文摘

从阿尔法狗元(AlphaGo Zero)的诞生看终极算法的可能性

1564
来自专栏新智元

【Quora精彩问答】机器学习的十条金科玉律

【新智元导读】曾在 Endeca, Google, LinkedIn 负责机器学习项目的 Daniel Tunkelang 在 Quora 上发表了给非专业人士...

3678
来自专栏机器人网

AI专家质疑深度学习,写下一篇长达27页文章

本文经AI新媒体量子位(公众号 ID: QbitAI)授权转载,转载请联系出处 多年坚持为深度学习泼冷水的纽约大学心理学教授Gary Marcus,今天终于写了...

3377
来自专栏量子位

这十大挑战,摆在DL面前:马库斯长文质疑深度学习

夏乙 若朴 安妮 编译整理 量子位 出品 | 公众号 QbitAI ? 多年坚持为深度学习泼冷水的纽约大学心理学教授马库斯老师(Gary Marcus),今天终...

2303
来自专栏机器之心

打响新年第一炮,Gary Marcus提出对深度学习的系统性批判

33712
来自专栏机器之心

资源 | 让AI学会刨根问底和放飞自我,斯坦福最新问答数据集CoQA

作者:Siva Reddy、Danqi Chen、Christopher D. Manning

601

扫码关注云+社区