top-N推荐中以recall为指标的实验设计

来源:互联网 发布:乌克兰少年 知乎 编辑:程序博客网 时间:2024/06/07 01:01
衡量top-N推荐的性能一般使用recall。不过,实验的设计并非那么直观。下面,先看几个paper里不同的实验方法,然后做个总结。

[27]的实验方法:

记处理后的(隐式)评分矩阵为S,其中用户u有过隐式反馈的物品集为u+,没有的集合为u-。对于每个用户u,作者从u+中随机抽取10个相关的物品,作为测试集u_test。作者从u-中随机抽取K|u+|个物品,记为u* ——由于增加K,算法的性能不会上升,因此文中K取2。为了评测,算法在不同数据系数程度下的性能,作者又从u+中,随机抽取最多m(5,10,20,30,50,ALL)个隐式评分,记为u#,最终得到训练集u_train= u#∪u*, given m。为了实验结果不受个别数据影响,对于每个given m,作者重复5次随机抽样的过程,以产生不同的u_test和u_train。最终,将5次结果的平均值作为given m的最终结果。


实验结果用recall@N来衡量。首先对于每个用户u,用上述训练出来的模型对u*和u_test进行评分。接着,对于每个u_test中的物品i,从u*中随机选取100个,然后将这101个物品排序。如果i的位置pos <= N那么就算是一个hit。整个测试集的recall@N = #hit/|test|。

[28]的实验方法:

大致与[27]一致。只不过测试集合和训练集是不相互交的:除去用户训练的implicit feedback,剩下的都作为测试集。值得一提的是,[28]使用的1-recall@5,是用来衡量推荐列表前5位有没有用户相关的物品。这其实跟上述[27]计算recall的方法是一样的。


[24]采用leave one out的方法,即对每个用户,只抽出一个implicit feedback作为测试集。然而,它采用的measure 是AUC。因此虽然跟[27],[28]一样都是learning to rank, 在recall计算上没有可比性。

总结:不知是论文里的疏漏,还是方法本身问题,按[27]得到的training set和test set有可能是不相交的,这个不可取。除了这个,[27]的其他做法都值得参考。比如,测试时,它随机选取100个无反馈的物品来测试一个相关物品i的排序,而不是所有无反馈物品。因为,无反馈不能代表不相关。因此,只要i的能排在大多数无反馈物品的前面,就足够了。另外,这样还能提高测试的性能。


[24] BPR: Bayesian Personalized Ranking from Implicit Feedback
[27] Top-N Recommendations from Implicit Feedback leveraging Linked Open Data
[28] CLiMF: Learning to Maximize Reciprocal Rank with Collaborative Less-is-More Filtering

0 0