Mahout 推荐系统 returns 没有用户的结果

Mahout recommender returns no results for a user

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

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

此文件中的列是:

用户编号 |项目编号 |项目评分

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 --输出small_data_set_output

Mahout 推荐输出文件显示:

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

我认为这意味着:

这是正确的吗?

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

提前致谢。

您的数据中可能存在一些错误,这里的前两个错误将导致未定义的行为:

  • ID 必须是从 0 开始的连续非零整数,因此您需要以某种方式将您的 ID 映射到上面。所以 your-user-ID = 1 将是 Mahout-user-ID = 0。对于项目也是如此,your-item-ID = 101 将是 Mahout-user-ID = 0。
  • 如果你的意思是用户没有表达偏好,你应该从输入中完全省略 0 值,这在某种意义上使偏好 "undefined"。为此,请完全省略这些行。
  • 始终使用 SIMILARITY_LOGLIKELIHOOD,它被广泛测量为明显优于其他方法除非您正在尝试预测收视率,在这种情况下使用余弦。
  • 如果您使用 LLR 相似度,您应该省略这些值,因为它们将被忽略。

除非您试图预测用户对某个项目的评分,否则偏好值的用途很少。偏好权重在确定推荐排名时毫无用处,这是典型的要优化的事情。如果你想以正确的顺序推荐正确的东西,那就扔掉值并使用 LLR。

人们有时对价值所做的另一件事是显示一些偏好权重,因此 1 = 产品页面视图和 5 = 产品购买。 这行不通! 我在大型电子商务数据集上进行了尝试,发现在添加产品视图时推荐效果更差,即使数据是原来的 100 倍。它们是具有不同用户意图的根本不同的用户操作,因此不能以这种方式混合使用。

如果您确实想要混合不同的操作,请使用描述的基于 Mahout、Spark 和 Solr 的新多模式推荐器on the Mahout site here:它允许交叉共现类型指标计算,因此您可以使用用户位置、喜欢和不喜欢,查看和购买。实际上可以使用整个用户点击流。但只有交叉共现将一个动作与规范的 "best" 动作相关联,即您要推荐的动作。