我尝试了基于项目的分布式推荐作业和10M movielens数据集。一切正常。我的问题是,在查看用户的建议时,我已经看到在推荐项目列表中有一些项目已经被用户评价。更具体一点:
假设用户ID为4的用户使用以下ID观看了电影:[123,543,234,567,324],然后再次在推荐列表中存在543和234。我只是看了Mahout in Action来理解算法,我找不到代码段来消除已经评级的项目,然后才生成TopK列表。我是否会遗漏某些东西,或者它推荐已经评级过的物品是否正常?
如果正常,是否可以从候选项目中删除这些项目?
P.S:在建议生成后过滤掉建议对我的情况来说效率不高,因为我想要的推荐数量是100,而对某些用户过滤后,这个数字减少到30等。提前致谢。
答案 0 :(得分:3)
自从我第一次创建代码以来,代码发生了很大变化,并且有几个RecommenderJob
s,但最初有一个阶段在最终向量和中添加了“(user,item,NaN)”元组对于所有现有的用户 - 项目对。这导致所有此类用户 - 项对的总和为NaN,并且可以从结果中排除。它可能不在那里了。
答案 1 :(得分:1)
我是RecommenderJob的作者之一。我们有单元测试,明确检查用户不是他们已经知道的推荐项目。如果这真的发生了,那将是一个严重的错误。你能看到输入数据的例子吗?
最好将此讨论转移到mahout邮件列表中 https://cwiki.apache.org/confluence/display/MAHOUT/Mailing+Lists,+IRC+and+Archives
答案 2 :(得分:0)
在recommenderjob的源代码中:
addOption(“filterFile”,“f”,“包含逗号分隔的userID,itemID对的文件。用于从中排除项目” +“该用户的推荐(可选)”,null);
我认为它可以通过将此文件提供给推荐人来解决您的问题。