论文解读——Performance of Recommender Algorithms on Top-N Recommendation Tasks

简介

本文是Koren等人在RecSys2010上的会议论文,文章的核心思想是

  1. 证明了误差指标和精度指标之间不存在强关联,即那些目标函数是RMSE并通过优化使之最小的算法,在精度指标上precision和recall上不一定好;
  2. 文章建议在使用测试集时去除其中的流行项目,避免使得计算的精度偏向于非个性化方法。

在常见的商业系统中,常常出现的猜你喜欢的推荐,常常被认为是一个top-N推荐任务,即寻找少数让用户感兴趣的项目。常用的基于错误度量的指标如RMSE不适合用于评价top-N推荐任务,相反一些精度指标如precision和recall则可以直接用于度量top-N的推荐效果。
本文对大量最先进的推荐算法进行了丰富的实验。实验发现,为最小化RMSE而优化的算法在top-N推荐任务中的效果不及预期,即RMSE上的提高常常不能转化为精度上的提高,甚至一个简单的非个性化算法在性能上可以胜过一些常见方法,并几乎达到复杂算法的精度。另一个发现是,很少的最流行的项目会影响top-N推荐任务的精度。因此,在评判一个推荐系统在top-N推荐任务中的效果的时候,测试集应当被谨慎选择以避免精度指标偏向非个性化解决方案。最后,本文提出了两种新的、与RMSE无关的协同过滤算法,在top-N推荐任务中显著超越其他推荐算法,并具有一些其他实用优势。

1 介绍

一个非个性化的、基于流行度的算法只能提供简单的推荐,一方面,由于这个推荐系统对让用户感到乏味和失望,而使得用户不感兴趣,另一方面,由于内容提供商投资推荐系统的目的是提高不知名产品的销量,因而也不会令内容提供商感兴趣。出于这个原因,本文在去除了特别流行的项目之后,进行了一系列额外的评判算法效果的实验。正如预期的那样,由于在去除了流行性项目后更加难以推荐成功,所有算法的精度都下降了。然后,不同算法的排序更加符合我们的期望,即非个性化的方法排名下降了。因此,在评判一个推荐系统在top-N推荐任务中的效果的时候,测试集应当被谨慎选择以避免精度指标出现严重误差。

2 测试方法

该文使用的测试方法与当前的常用方法不太一致。
首先,使用训练集M对模型进行训练,然后对于在测试集T中被每个用户u评分过的项目i计算方法如下:

  1. 随机选择1000个未被用户u评分过额外的项目(这1000个项目不在训练集中,也不在测试集中),可以假设这1000个项目中的大部分用户是不感兴趣的(因为没有评分过,做此假设是合理的)
  2. 预测这1000个项目和项目I的评分
  3. 对预测出来的1001个项目的评分进行排序,用p表示项目I在这1001个项目中从高到低的排名,显然最理想的情况是p为1
  4. 通过从高到低提取N个项目,构建一个top-N推荐列表,如果 p ≤ N p\leq N pN,那么就算推荐成功,算一个hit

另外,需要注意的是,该文中定义的recall和我们常用的定义方式不同
r e c a l l ( N ) = # h i t s ∣ T ∣ recall(N)=\frac{\#hits}{\vert T\vert} recall(N)=T#hits
p r e c i s i o n ( N ) = # h i t s N ⋅ ∣ T ∣ = r e c a l l ( N ) N precision(N)=\frac{\# hits}{N \cdot \vert T \vert}=\frac{recall(N)}{N} precision(N)=NT#hits=Nrecall(N)

2.1 流行项目vs长尾项目

大多数评分集中于小部分最流行的商品,比如在Netflix数据集中,33%的评分数据是关于1.7%的流行项目,而在Movielens在同样存在着33%的评分数据集中于5.5%的流行项目的现象。

3 协同算法

基于协同过滤的方法可以分为两种,基于邻居的方法和隐因子方法。

3.1 非个性化方法

本文中采用的非个性化方法包括:

  1. MovieAvg:推荐平均评分最高的N个项目
  2. Top-Pop:推荐最流行的,即有最多评分数据的N个项目

3.2 近邻模型

本文的近邻模型使用的是CorNgbr(Correlation Neighborhood)
使用的是项目间相似度,考虑到稀疏性,所以定义了一个衰减因子 λ 1 \lambda_1 λ1并设置为100,从而得到了衰减相似性 d i j = n i j n i j + λ 1 d_{ij}=\frac{n_{ij}}{n_{ij}+\lambda_1} dij=nij+λ1nij,其中 n i j n_{ij} nij是项目i和项目j被相同用户的评分的次数,该算法的实现可参照推荐系统surprise库教程中的KNNBasic算法。
r ^ u i = b u i + ∑ j ∈ N u k ( i ) d i j ⋅ ( r u j − b u j ) ∑ j ∈ N u k ( i ) d i j \hat{r}_{ui} = b_{ui} + \frac{ \sum\limits_{j \in N^k_u(i)} d_{i j} \cdot (r_{uj} - b_{uj})} {\sum\limits_{j \in N^k_u(i)} d_{ij}} r^ui=bui+jNuk(i)dijjNuk(i)dij(rujbuj)
未加分母的模型被称为NNCosNgbr,因为未加分母,因此该模型会给那些拥有更多邻居的项目更高的评分。

3.3 隐因子模型

这个主要涉及三个模型

  1. AsySVD 来自于作者的另一篇论文,后期会解读,欢迎关注
  2. SVD++ 就是推荐系统surprise库教程中的SVDpp算法
  3. PureSVD算法(作者在本文中提出的新的算法) r ^ u i = r u ⋅ Q ⋅ q i T \hat r_{ui}=r_u \cdot Q \cdot q_i^T r^ui=ruQqiT值得注意的是,其中的Q并非迭代得到,而是通过 R ^ = U ⋅ ∑ ⋅ Q T \hat R=U\cdot \sum \cdot Q^T R^=UQT进行SVD奇异值分解得到

4 结果

本文中定义的recall和precision存在比例关系,因此结果中展示的recall的结果其实也就是precision的结果。
在Movielens数据集上,recall从高到低依次是:PureSVD50、NNCosNgbr、SVD++、PureSVD150、TopPop、AsySVD、CorNgbr和MovieAvg。因此,在精度上最优秀的算法是非基于RMSE的PureSVD和NNCosNgbr。
去除Movielens数据集中的流行项目后的精度排名依次是PureSVD150、PureSVD50、SVD++、NNCosNgbr、AsySVD、CorNgbr、MovieAvg和TopPop,结果更加符合期望。
Netflix数据集上的结果与之类似,不过值得注意的是,在去除了流行项目后,CosNgbr的表现十分突出,值得注意。

5 关于PureSVD的讨论

PureSVD表现优异,而且简单,即在训练模型时使用SVD分解即可,而不需要进行迭代学习。同时,作者指出了常用的RMSE测试方法的缺点,即只关注那些用户提供的评分,很适用于基于RMSE优化的算法。本文中使用的top-N测试方法更贴近实际,考虑了那些目前尚未有评分的项目。

6 结论

除了常用的RMSE测试方法之外,也应该关注top-N的精度评价指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值