Large-scale Parallel Collaborative Filtering for the Netflix Prize

来源:互联网 发布:keil流水灯c语言程序 编辑:程序博客网 时间:2024/05/02 02:45
ref: http://blog.csdn.net/waitingfotime/article/details/8983152

最近使用ALS-WR分解矩阵,忙里偷闲,简单的翻译了这篇paper,很是佩服作者的思路。第一次翻译,各种不符,轻拍。建立一个专门讨论数据挖掘,推荐算法等的群,推荐系统之Mahout 13591891,欢迎大家加入一起讨论。

摘要:
    众多推荐系统使用基于用户过往行为(浏览、购买或评论数据)的协同过滤算法(CF)为用户提供推荐商品。CF带来的两个主要问题是如何解决大并发性和用户信息的稀疏度对系统带来的影响。此文介绍的大规模并行算法ALS-WR,正是基于以上2点挑战CF,同时它也是为Netflix Prize设计的算法。我们使用运行在Linux集群上的并行Matlab作为实验平台。根据实验结果,ALS-WR算法的效果会随着特征值和迭代次数的增加而提高。使用Netflix包含1000个隐特征的数据集,ALS-WR得到的RMSE是0.8985,这是基于单纯一个算法的最优结果。与其他并行算法结合,我们得到了将Netflix的CineMatch系统效果提高5.91%。对于超大数据据,ALS-WR简单并可扩展性良好。

1.介绍
推荐系统尝试基于可用信息为潜在用户推荐商品(包括电影、音乐、网页,商品等)。一个成功的推荐系统可以显著的提高电子商务公司的收入或者在线社区的用户活跃度。对于大多数推荐系统,基于内容的算法用来分析物品相应的元素(文本,元信息,特征)得到相似物品,CF利用大量用户的行为偏好数据集为用户推荐相似物品。CF十分流行并被广泛用于互联网公司,例如Amazon,Netflix,Google News等。
     Netflix Prize是Netflix公司举办的大规模数据挖掘比赛,旨在设计出基于480000+用户对近18000部电影给出的超过1亿评分数据集的推荐预测算法。训练数据由user、movie,data,rating组成,rating是1到5的整型数字。测试数据由280w隐藏rating的数据组成。比赛的目标是使测试集的RMSE尽可能的小。Netflix自己的推荐系统CineMatch计算的RMSE是0.9514,比赛的挑战是提升10%;
      Netflix Prize展示了一系列的挑战(基于此,目前尚未有人获得奖金)。第一个挑战是,目前的数据集是此前基准数据的100倍,获得结果需要更久的模型训练时间和更大的系统内存容量。第二,在user-rating矩阵中,仅仅有1%的数据是有效的,其余大部分都是需要预测的,当然这是CF算法最基本的用途。第三,在训练集和测试集中广泛存在着噪音数据,我们不能期望用户是完全可被预测的,至少用户对感兴趣电影的感觉是不停改变的。第四,用户在训练集和测试集中的评分分布是不同的,训练集中是1995-2005年数据,而测试集中2006年的数据。特别是,测试集中的具有较少评分数据的用户占大多数。直观上讲,对于在训练集中数据稀疏的用户,很难去预测他对其他电影的评分。
     在这篇论文中我们会详细阐述这一个问题,并提出一个并行算法--基于lamda正则化的交替最小二乘法。我们使用运行在linux集群上并行matlab作为实验平台,我们的算法在大的,稀疏的数据集下具有很好的扩展能力。我们在Netflix Prize取得了提升5.91%的成绩。
     论文的组成为,在第二章简单的陈述问题;第三章介绍核心算法;第四章介绍我们在实验中获得的一些有用的经验;第五章讨论相关的工作;第六章预测了将来的发展方向。

2.问题描述

使  表示user-moving矩阵,表示user i对电影j的评分,可能是存在也可能是缺失的。 表示用户,表示电影,推荐系统的任务就是根据既有评分推测尚未评分的值。
我们从一个R的低阶逼近矩阵开始,通过赋予用户和电影一个小的特征空间来逼近R。用户和电影具有各自的特征向量,评分则可以利用这些特征向量的内积建模。
令U为user矩阵,M为movie矩阵。表示特征空间的纬度,也就是模型中的隐式变量的数量。这个值由交叉验证和hold-out dataet决定。
如果用户的评分是完全可预测的并且是足够大的,则可使
使用最小损失函数填充U和M。我们使用均方损失函数来计算。评分依据于一个误差的平方值。
                  (1)

所以,总的误差值就是每一个已知评分误差的总和。

                       (2)
I是已知评分的数据集,n是I的大小。
我们可以用下面的公式描述低阶逼近矩阵:

                         (3)

U和M是真实的矩阵,具有列。

根据公式3,可知,共有个参数需要确定,同时,I的规模比小得多,因为即便是很少的用户也不会对近18000个电影进行评分,更不用说全部用户了。在大的稀疏数据集下解公式3会带来过度拟合,为了避免,可以用一个Tikhonov正则串来修正函数。

有关Tikhonov矩阵在下一章进行讨论。

3.方案
在这一章,我们描述了一个迭代的算法,带有正则化权重lamda的交替最小二乘法。同时,我们会在并行matlab平台上实现这个算法。
3.1 ALS-WR
对数据去噪和修复是十分重要的,这对预测未知的值有很大的影响。SVD是一种常规算法,它利用2个K阶矩阵去逼近原始矩阵。这个方法利用最小化弗罗宾尼斯范数来达到最小化RMSE的目的。但是,在稀疏度很高的情况下,传统的SVD是算不出U和M的。
      我们利用ALS来实现这一目的:
step 1:初始化矩阵M,第一行是所有电影的评分均值,其余行是随机的小数值。
step 2:根据M,通过目标函数(平方误差和)解矩阵U
step 3:根据U,利用相同的方式解M
step 4:重复2和3直到满足停止条件

停止条件依赖与RMSE的值,在一次迭代后,RMSE的值与上一次的RMSE差距在0.001,则可以停止迭代,保存M和U,计算最终的预测值。
在step2中,若不实用正则化修正,可能会导致过拟合。通常的解决方式是利用Tikhonov方式。通过大量实验,我们发现利用lamda正则化的效果最好,即便是增加特征数量或是迭代次数,都不会带来过拟合。

          (5)
 和分别表示user评分数和电影数,表示user i评分过的电影,表示评价过电影j的所有user。

给定的U的一列,称为,由解正则化线性最小平方问题得到,这个问题由user i评分记录,以及i评分过的电影的特征向量组成

这里,E是单位矩阵。表示M的子矩阵,它的列是user i评分过的电影,是以评分电影为列的矩阵R的第i行向量。
同样的,当M被修改后,我们根据对电影j评过分的user特征向量和他们的评分通过正则化线性回归计算

这就是通过U计算M,然后通过M计算U的过程。
3.2 并行的ALS-WR

4.对Netflix Prize问题的解决效果
对一个特征值,进行了10到25次运算,当2次运行的RMSE变化小于0.001时,结束迭代。
最佳的lamda值通过试验得到,RMSE的收敛对于lamda而言是一个凸函数,最佳的lamda对于特征值单调递减,依赖这个结论,我们可以通过2-3次实验就得到对于不同的特征值对应的最佳的lamda。

4.1后期处理
对于每一个预测值,我们设置一个全局修正值。给定一次预测,如果预测的均值不等于测试集的均值,则依据测试集的均值与预测值的均值差修正所有的预测值,这一方式可以很好的降低RMSE。另一种方式方式通过线型结合不同预测结果来提示预测准确度。例如,给定2组预测值P0和P1,可以通过公式组成一组预测值,通过线性回归找到使RMSE最小的x值。因此,PX会比P0和P1更加准确。

4.2 经验
实验中最大的发现是,无论是提高特征值的数量还是迭代次数,都不会带来过拟合。

图1表明了,当特征值数目和lamda固定时,每一次迭代都会增加算法的准确度,在20次迭代后趋于稳定。

图2表明了,当lamda固定时,不同的特征值数目,对RMSE带来的变化。可以看出RMSE随着特征值数目的增加单调递减。

通过各种实验,ALS-WR对RMSE的最低取值应该是0.8985,提高了5.56%。
原创粉丝点击