1

我已经使用 10M movielens 数据集尝试了基于项目的分布式推荐作业。一切正常。我的问题是,在查看针对用户的推荐时,我发现在推荐项目列表中,有些项目已经被用户评分。更加具体:

假设用户 ID:4 的用户观看了以下 ID 的电影:[123,543,234,567,324],然后在推荐列表中再次出现 543 和 234。我只是查看 Mahout in Action 以了解该算法,我找不到在生成 TopK 列表之前消除已评级项目的代码段。我错过了什么,还是它推荐已经评分的项目是正常的?

如果正常,是否可以从候选项目中消除这些项目?

PS:在产生推荐后过滤掉推荐对我的情况来说效率不高,因为我想要的推荐数量是 100,在过滤某些用户后,这个数字会减少到 30 等等。

提前致谢。

4

3 回答 3

3

自从我第一次编写代码以来,代码已经发生了很大变化,并且有几个RecommenderJobs,但最初有一个阶段为所有现有用户-项目对的最终向量和添加了一个“(用户,项目,NaN)”元组。这导致所有此类用户-项目对的总和为 NaN,并且可以从结果中排除。它可能已经不在里面了。

于 2012-12-11T15:10:52.000 回答
1

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

最好将此讨论移至 https://cwiki.apache.org/confluence/display/MAHOUT/Mailing+Lists,+IRC+and+Archives的 mahout 邮件列表

于 2012-12-13T10:58:52.890 回答
0

在Recommenderjob的源代码中:

addOption("filterFile", "f", "包含逗号分隔的用户ID,项目ID对的文件。用于从" + "该用户的推荐中排除项目(可选)", null);

我认为它可以通过将此文件提供给推荐工作来解决您的问题。

于 2012-12-22T02:55:48.787 回答