Mahout推荐器不会为用户返回任何结果

时间:2015-01-31 07:18:37

标签: hadoop mahout-recommender

我很好奇为什么在下面的示例中,Mahout推荐人没有为用户1返回推荐。

我的输入文件如下。我添加了空行以增强可读性。此文件在通过Mahout运行之前需要删除空白行。

此文件中的列为:

用户ID |项目编号|项目评级

1 101 0
1 102 0
1 103 5
1 104 0

2 101 4
2 102 5
2 103 4
2 104 0

3 101 0
3 102 5
3 103 5
3 104 3

您会注意到项目103是所有3个用户评分的唯一常用项目。

我跑了: hadoop jar C:\ hdp \ mahout-0.9.0.2.1.3.0-1981 \ core \ target \ mahout-core-0.9.0.2.1.3.0-1981-job.jar org.apache.mahout.cf.taste。 hadoop.item.RecommenderJob -s SIMILARITY_COOCCURRENCE --input small_data_set.txt --output small_data_set_output

Mahout推荐输出文件显示:

2 [104:4.5] 3 [101:5.0]

我认为这意味着:

  • 用户2将被推荐为项目104.由于用户3对项目104 a 3进行了评分,因此可以将4.5推荐得分与下面的结果进行对比...

  • 用户3将被推荐为项目101.由于用户2将项目101评为“4”,这可能会导致建议得分略高于5.

这是对的吗?

为什么用户1不包含在推荐输出文件中?用户1可能已收到对项目102的推荐,因为用户2和用户3对其进行了评级。数据集太小了吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您的数据中可能存在多个错误,前两个错误会导致未定义的行为:

  • ID必须是从0开始的连续非零整数,因此您需要以某种方式映射您的ID。所以your-user-ID = 1将是Mahout-user-ID = 0.对于项目相同,your-item-ID = 101将是Mahout-user-ID = 0.
  • 如果你的意思是用户没有表达偏好,你应该完全忽略输入中的0值,这使得偏好在某种意义上是“未定义的”。为此,完全省略了这些行。
  • 总是使用SIMILARITY_LOGLIKELIHOOD,它被广泛测量为明显优于其他方法,除非您试图预测评级,在这种情况下使用余弦。
  • 如果使用LLR相似性,则应省略这些值,因为它们将被忽略。

除非您尝试预测用户对某个项目的评分,否则很少使用偏好值。偏好权重在确定推荐排名时无用,这是优化的典型事项。如果您想以正确的顺序推荐正确的东西,请抛出值并使用LLR。

人们有时会对价值观做的另一件事是显示一些偏好权重,因此1 =产品页面的视图,5 =产品购买。 这不起作用!我尝试使用大型电子商务数据集,发现在添加产品视图时建议更糟糕,即使数据量增加了100倍。它们具有根本不同的用户操作,具有不同的用户意图,因此不能以这种方式混合。

如果你确实想要混合不同的动作,请使用基于Mahout,Spark和Solr的新多模式推荐器on the Mahout site here:它允许交叉共生类型指示器计算,这样你就可以使用用户位置,喜欢和不喜欢,查看和购买。实际上,可以使用整个用户点击流。但只有交叉共同将一个动作与规范的“最佳”动作联系起来,即你想要推荐的动作。