2012-12-11 120 views
1

我试过基于分布式推荐人作业的10M movielens数据集。一切正常。我的问题是,在检查用户的建议时,我看到在推荐的项目列表中有用户已评分的项目。更具体地说:Apache Mahout分布式推荐人推荐已评级项目

假设用户使用userid:4已经观看了具有以下ID的电影:[123,543,234,567,324],然后在推荐列表中再次出现543和234。我只是看着Mahout的行动来理解算法,我找不到一个代码段,它会在生成TopK列表之前消除已经评分的项目。我错过了什么,或者它推荐已经评分过的项目是否正常?

如果是正常的,是否有可能从候选物品中消除这些物品?

PS:过滤出的建议产生后的建议是不是有效的用于我的情况下,由于建议我想要数量为100并且对于一些用户滤波之后这个数目减小到30等

预先感谢。

回答

3

自从我第一次创建代码以来,代码已经发生了很大的变化,并且有几个RecommenderJob s,但最初有一个阶段为所有现有的最终矢量和添加了一个“(user,item,NaN)用户项目对。这导致所有这些用户项目对的总和为NaN,并且可以从结果中排除。它可能不在那里了。

+0

感谢您快速回复肖恩。我使用了0.7版本的org.apache.mahout.cf.taste.hadoop.item.RecommenderJob。我会看看是否可以找到你提到的部分。如果没有,我就明白了。 – messe

1

我是RecommenderJob的作者之一。我们有明确检查用户不是他们已知的推荐项目的单元测试。如果真的发生这将是一个严重的错误。你能举出一个你看到这种情况发生的输入数据的例子吗?

这也将更好地讨论在 https://cwiki.apache.org/confluence/display/MAHOUT/Mailing+Lists,+IRC+and+Archives

+0

嗨,对于迟到的回答抱歉。在mahout 0.7下,我尝试了Movielens 10M数据集,为3节点hadoop群集上的每个用户产生100条推荐。 “bin/mahout org.apache.mahout.cf.taste.hadoop.item.RecommenderJob - 输入movieLensLogs - 输出outputMovie --usersFile movieUsers.txt --numRecommendations 100 -s SIMILARITY_LOGLIKELIHOOD”。只要我像上面那样运行这个工作。正如我在测试它是否向用户推荐已观看过的项目时所解释的那样,我曾经遇到过这样的情况:对于某些用户,它建议已经评估了项目。这是否可以归因于大量的推荐物品? (在我的情况下是100) – messe

0

移动到象夫邮件列表在recommenderjob的源代码:

addOption(“filterFile”,“F”,“包含逗号文件用于从“ +”该用户的推荐(可选)中排除项目“,null);

我认为它可以通过将此文件提交给recommenderjob来解决您的问题。

+0

是的,它可以解决我的问题。但是,由于数据太大,这意味着需要为相同的输入文件提供过滤器,比方说所有的用户历史记录。通常情况下,它不应该需要过滤器。我想过滤器是为了消除用户在推荐系统中不喜欢的项目。 – messe