摘要
尽管现在很多研究将RMSE做为推荐算法的优化目标,但我们要知道,这一目标是不切实际的。现实生活中,更加常用的是TopN推荐。而实验表明,TopN推荐的指标(准确率、召回率)和RMSE有时并不一致。最后,我们给出了两种协同过滤方法的改进,它们的RMSE都没有那么好,但是在TopN推荐中做的很好。
绪论
文章的主要工作包括:
1.展示了误差度量(如RMSE)和精度度量(如准确率和召回率)之间并没有什么必然关系
2.建议仔细构建数据集,以免产生精确度的偏差度量
3.介绍了现有算法的新变体,这些方法可以改进TopN推荐的实际性能
测试方法
测试方法和上一篇论文有些相像,下面给出测试方法的论述:
1.将数据分成两部分,两部分的比例大概是100:1.4,前一部分做为训练集,后一部分中评分为5星的作为测试集,即测试集中包括了我们认为应该推荐给用户的数据。
2.模型训练好之后,每次从测试集中拿出一个电影,随机挑选1000个用户没有评分过的电影,共1001部电影一起跑一个结果,结果中测试集的电影在1001个电影里的排名是K。由于是TopN推荐,若K小于等于N,记为命中(hit),否则记为没有命中。
3.准确率和召回率按照下式计算
由于假设了1000个电影用户都不喜欢,这里算出的是一个性能下界。
流行商品与长尾分布
根据放之四海而皆准的二八定律,极少数的电影应当占据了绝大多数人的爱好。
以Netflix数据集为例,1.7%的电影占据了33%的评分条目数。在这里把前2%流行的电影称为head分布,把后98%流行的电影称为long分布。
协同算法
常见的协同算法还是那两种:基于邻域的算法和基于矩阵分解的算法。
非个性化模型
将所有电影中最热门/评分最高的推送给所有人,没有用户之间的差异
基于邻域的算法
相似度度量:
是拉普拉斯平滑因子。
评分预测(CorNgbr方法):
●非归一化余弦距离(NNCosNgbr)方法
在评分预测的例子中,归一化项是为了让评分在一个适当的范围,但是在TopN推荐中,我们并不需要这样的范围,因为TopN推荐要的是一个排名。所以去掉归一化因子。
这么做的影响是对于比较高的用户,它们的分数更高了,也就是说有更多neighbor的item会有更靠前的排名,因为它有更高的可信度。
注意这个时候,等式左边已经不再说评分,而是u和i之间关系的一种指标。
在本文中,使用的是用算出的余弦相似度(也就是没有加平滑因子),使用了所有的用户而不是评价了ij的共同用户,记该模型为Non-Normalized Cosine Neighborhood (NNCosNgbr).
隐语义模型
隐语义模型的始祖是SVD,因为线性插值填充缺失部分的计算量实在太大,衍生出了一批以梯度下降为基本优化思想的分解方法,其中就包括了我们熟悉的AsySVD和SVD++。
●PureSVD
将缺失值都用0填充,就可以用SVD的专门包跑得很快完成矩阵的分解:
定义
由于正交性可得
又有
从而
其中,是用户u的评分历史。这么做的好处是可以不用对用户产生任何特定参数。
这里起名叫做PureSVD的原因,可能是它没有像其他算法一样用各种各样的方法来填补缺失值的空挡,而是简简单单的用0填充缺失值,然后结果居然还不错。
实验结果
参与本次评比的算法有:
MovieAvg和TopPop:非个性化的统计方法
CorNgbr:邻域算法,用归一化余弦相似度
NNCosNgbr:邻域算法,用非归一化余弦相似度
AsySVD和SVD++:这两个都大名鼎鼎,不用多说
PureSVD:本文提出的看起来很简单的算法
注意:
(1)每个算法都做了两次实验,一次在全部的test上,一次在长尾的test上。第二次实验的目的是为了防止过于流行的那些数据对整体推荐产生偏差。
(2)对于以TopN推荐的精确度作为评估指标来说,N太大时结果没有意义,一个视频排在第100和200也没有区别,反正都不会被推荐
Movielens数据集
令人欣慰的是,我们提出的两种算法拔得头筹。但是两种平均值算法也获得了亮眼的表现,这并不符合我们的期望。事实上,我们希望它们的性能弱于那些个性化推荐的算法,但可能存在这样的item,由于太过于流行而导致只要推荐它们,就可以提高准确率。这当然也是一种形式的优越性能,但推荐系统设计的初衷是为了缓解信息过载,如果推荐给用户的都是网络上最流行的视频,那么推荐系统就失去了意义。另一方面,也是为了提高惊喜度和覆盖率。所以第二个实验,只用了test中的长尾数据集。
现在结果符合我们的期望了。这启发我们,一定要好好选择数据集。
Netflix数据集上的结论差不多,不写了。
对PureSVD的讨论
无论是在哪个数据集、全部数据还是长尾数据,PureSVD都是当之无愧的第一。但是呢,它操作又简单,RMSE又差(据说),所以这是一个值得分析的方法。
一个有趣的发现是在长尾数据集上,PureSVD的维数提高时结果会变好,但全部数据集似乎并没有这样的特性。这大约是因为PureSVD的第一潜在因素捕获最受欢迎项目的属性,而附加潜在因素表示与不受欢迎项目相关的更精细的特征。它在TopN表现这么好的原因可能是它考虑到了用户没有评分过的电影,和只关心评分的其他那几个算法不同。PureSVD还有一些改进方向,比如说缺失值的填充等等
下面是依旧没耐心看的结论
结论
(以下内容来自谷歌翻译)
长期以来,推荐者的评估被分为准确度量度(例如,精度/召回)和误差度量(特别是RMSE和MAE)。使用形式优化方法的数学方便性和适应性使得像RMSE这样的误差度量更受欢迎,并且它们确实在文献中占主导地位。然而,众所周知,准确度量量可能是更自然的标准,因为它们直接评估前N个推荐的质量。
这项工作通过一项广泛的实证研究表明,RMSE等误差度量可以作为前N精度的良好代理的方便假设充其量是值得怀疑的。错误指标与准确度指标之间没有单调关系。这可能需要重新评估前N个系统的优化目标。从好的方面来看,我们已经提出了已知算法的简单而有效的变体,这些变体在RMSE术语中是无用的,并且在追求前N精度时却提供了卓越的结果。
顺便说一下,我们还讨论了设计用于进行前N个精度评估的测试集的可能缺陷。特别是,测试集的粗心构造将使召回和精确度强烈偏向于非个性化算法。我们采用的一个简单的解决方案是从测试集中排除极受欢迎的项目(同时保留~98%的项目)。由此产生的测试集强调了相当重要的非平凡项目,似乎更符合我们的期望。首先,它正确显示了非个性化算法的较低值。其次,它显示了广泛使用的基于相关性的kNN方法的良好行为,否则(当在整个项目集上评估时)表现出极差的结果,强烈地面对公认的实践。
我的思考
之前看项亮那本推荐系统实践,就很奇怪为什么全书基本都在用准确率和召回率,而我看到的论文都是RMSE呢?这篇文章一定程度上解决了我的问题。
技术总结
1.选择合适的数据集很重要,因为数据集真的可能带来偏差,参见长尾数据集和普通数据集的对比
2.根据不同的应用场景选择不同的训练指标
3.对现有的方法进行改进,即使很简单,只要分析得当,便有可能有突破的结果