【编者按】本文由CSDN博主 @松子茶 翻译自Quora的问题:“Is there any summary of top models for the Netflix prize?”答主位为Edwin Chen,详细解析了Netflix算法的构建。 我试着在这里说些想法。矩阵分解技术和模型组合方法可能是与Netflix Prize有关最多被讨论的算法,但我们也使用了很多其他的洞见。 Normalization of Global Effects 全局效应的正常化假设Alice给《盗梦空间》打4分。我们可认为这个评分由以下几部分组成:
换句话,我们把这4分分解成4 = [3.1 (基准分) – 0.5 (Alice的专门效应) + 0.7(盗梦空间的专门效应) + 0.7(特别的交互效应)因此与其让我们的模型预测4分本身,我们也可以首先试着去除基准预测的效应(前三部分)然后预测这特别的0.7分(我想你也可以认为这就是一种简单的boosting) 更一般的,基准预测的其他例子还有:
事实上,对这些偏倚建模被证明相当重要:在他们给出最终解决的论文中,Bell和Koren写道: Neighborhood Models 邻居模型让我们看看一些更复杂的模型。当提到上面的部分时,一个标准的方法就是用邻居模型进行协同过滤。邻居模型主要按照以下工作。为预测Alice对《铁达尼号》的评分,有两件事可以做。
简单以基于item方法为例,我们主要的问题是
标准的方法是使用一些相似性的度量(比如相关性和雅可比指标)来定义电影对之间的相似性,使用在此度量下K个最相似的电影(K可能是用交叉验证选择的),在计算加权平均数时用同样的相似性度量。但这有很多问题
所以另一种途径是如下:
Implicit Data 隐性数据在邻居模型之上,也可以让隐性数据影响我们的预测。一个小的事实比如用户给很多科幻电影打分而没有给西部电影打分,暗示了用户喜欢科幻多过牛仔。所以使用与邻居打分模型相似的框架,我们可以对盗梦空间学习到与它电影邻居相联系的偏移量。无论我们想怎么预测Bob在盗梦空间上的打分,我们看一下Bob是否给盗梦空间的邻居电影打分了。如果有,我们加上一个相关的偏移;如果没有,我们不加(这样,Bob的打分就被隐性惩罚了) Matrix Factorization 矩阵分解用于补充协同过滤的邻居方法是矩阵分解方法。鉴于邻居方法是非常局部的评分方法(如果你喜欢哈利波特1那么你会喜欢哈利波特2),矩阵分解方法提供了更全局的观点(我们知道你喜欢幻想类的电影而哈利波特有很强的幻想元素,所以你会喜欢哈利波特),将用户和电影分解为隐变量的集合(可认为是类似幻想或者暴力的属性)。事实上,矩阵分解方法大概是赢得Netflix Prize技术中最重要的部分。在2008写就的论文中,Bell和Koren写到:
找到这些分解的典型方法是在(稀疏)评分矩阵上执行奇异值分解(使用随机梯度下降并正则化factor的权重,可能是限制权重为正以得到某种非负矩阵分解)。(注意这里的SVD与在线性代数里学到的标准的SVD有所不同,因为不是每一个用户在每一步电影上都有评分因而评分矩阵有很多缺失值但我们并不像简单地认为其为0) 在Netflix Prize中一些SVD启发的方法包括
Regression 回归一些回归模型也被用来预测。我认为该模型相当标准,因此不在这里花费太久。基本上,正如邻居模型,我们可以采取以用户为中心的方法和以电影为中心的方法来做回归。
Restricted Boltzmann Machines 有限波尔兹曼机有限波尔兹曼机提供了另一种可使用的隐变量方法。如下论文是如何应用该方法到Netflix Prize上的描述(如果这论文难于阅读,这里有RBMs的简介). Temporal Effects 当时效应很多模型包含当时的效应。举例而言,当描述以上提到的基准预测时,我们使用一些时间有关的预测允许用户的评分(线性的)依赖于从他首次评分开始的时间和电影首次被评分的时间。我们也可以得到更细粒度的时间效应:把电影按时间分为几个月的评分,允许电影在每个分类下改变偏倚。(例如大概是2006年5月,时代杂志提名铁达尼号为有史以来最佳电影,因此那段时间对该电影的收视评分冲刺增长)。在矩阵分解方法中,用户因素也认为是时间相关的。也可以给最近的用户行为更高权重。 Regularization 正则化正则化也用于很多模型的学习以防止数据集上的过拟合。岭回归在分解模型中大量使用于对较大的权重做惩罚,Lasso回归(尽管不那么有效)也是有用的。很多其他的参数(例如基准预测,邻居模型中的相似性权重和插值权重)也使用非常标准的shrinkage技术进行估计。 Ensemble Methods 组合方法最后谈谈怎么把所有不同的算法组合以提供一个利用每个模型有点的单一评分(ps: 注意,就像上面提到的一样,这些模型中很多都不是在原始的评分数据直接训练的,而是在其他模型的剩余数据上)。论文中给出最终解决的细节,冠军叙述了怎样使用GBDT模型组合超过500个模型;之前的解决是使用线性回归来组合预测值。 简要地说,GBDT按照顺序对数据拟合了一系列的决策树;每棵树被要求预测前面的树的误差,并往往略有不同版本的数据。更长的类似的技术的描述,请参看问题. 因为GBDT内置可以引用不同的方法在数据的不同切片上,我们可以添加一些预测,帮助树们使用有用的聚类:
举例而言,当Bell和Koren在使用更早的混合方法时发现一件事,即当电影或者用户有少量评分时候RBMs更有用,而当电影或者用户有大量评分时矩阵分解方法更有用。这是一张2007年竞赛的混合规模效应的图.
最后, 距我完成Netflix Prize的论文已经有一段时间了,记忆与笔记都较粗略,非常欢迎指正和建议。 |
|