我正在寻找一种动态模型来向用户推荐电影。每当用户观看电影或对电影进行评级时,建议均应更新。为了简单起见,我考虑考虑两个因素:
- 用户过去其他电影的评分
- 用户观看某些过去的电影的时间
如何建立这样的模型?学术文献对此有何建议?
我是该领域的新手,我猜想线性再模型可以提供良好的结果,而不希望花一些复杂的方法来避免在参数估计中施加不必要的不确定性。但是,也许已经有了实践中常用的确定方法?
我正在寻找一种动态模型来向用户推荐电影。每当用户观看电影或对电影进行评级时,建议均应更新。为了简单起见,我考虑考虑两个因素:
如何建立这样的模型?学术文献对此有何建议?
我是该领域的新手,我猜想线性再模型可以提供良好的结果,而不希望花一些复杂的方法来避免在参数估计中施加不必要的不确定性。但是,也许已经有了实践中常用的确定方法?
Answers:
这实际上是机器学习领域中一个相对著名的问题。大约在2006年,Netflix为该算法提供了100万美元,该算法为其推荐系统提供了最佳的合理改进。在这本有关入门机器学习的Caltech教科书中,简要讨论了获胜解决方案的理论。
基本上,使用整体学习方法。特别地,采用一种混合或堆叠。这很简单,但是很直观。要了解和谐使用不同统计方法的直觉,请考虑不同的人喜欢同一部电影的不同原因:例如,乔可能喜欢Topgun,因为他喜欢80年代的动作片,而Jane喜欢Topgun,是因为她喜欢带有Kenny Loggins电影配乐的电影。因此,两个观众都观看(并高度评价电影)的事实并不一定意味着他们很可能会喜欢其他电影。理想情况下,预测算法将能够至少在某些容量上适应这些差异。
这可能使解决方案听起来很简单,但要平衡竞争算法并为每种情况确定最佳猜测的优先级,绝对不是一件容易的事。Netflix提供了如此丰厚的奖金这一事实应该使挑战的规模变得显而易见。
如果您刚刚开始机器学习,那么根据您的兴趣水平和数学背景,检查以上资源可能会有所帮助。因此,回归可能会很好,但可能会有明显更好的性能。
这些问题的一半挑战是知道要搜索什么。
您可能没有意识到就添加了标签,但实际上您正在寻找推荐系统的信息。您可能要从协作过滤开始,或者最好在该页面上引用Ricci,Rokach和Shapira撰写的《推荐系统简介手册》。
您应该在Coursera上查看Andrew Ng的课程:https : //www.coursera.org/learn/machine-learning 它提供了有关构建推荐系统的课程,这似乎是您所需要的。本质上,它是一种线性回归的形式,可以从对电影评分的人那里学习电影的综合属性,并使用它来预测未对电影进行评分/观看的人的推荐。
在Netflix挑战赛(2006年10月-2009年9月)中,一个非常庞大的合奏(107个单独的子模型)最终获得了100万美元的大奖,但值得注意的是,第一个击败Netflix Cinematch的简单算法(非集合算法)基准基于广义(稀疏矩阵)SVD。在比赛开始仅六天之后,一支名为WXYZConsulting的团队就击败了Cinematch,这是第一个里程碑。
SVD(奇异值分解)是一种矩阵分解算法,其中从[user, movie]
每个[u, m]
位置(*)均具有等级(1到5星)的2d 矩阵开始,然后将其分解为3个矩阵,其中中间矩阵为用户和电影之间的潜在互动。
您可以使平方矩阵等级更小或更大,以分别包含或多或少的此类潜在因子相互作用。
快速/高效的稀疏SVD有多种免费软件实现。例如redsvd或vowpal-wabbit,因此在编写自己的脚本之前,您可能需要尝试一下。
(*)这些条目大多数为零,因为大多数用户未对大多数电影进行评级。即矩阵非常稀疏。
参考文献: