【问题标题】:Mahout recommender returns no results for a userMahout 推荐器不为用户返回任何结果
【发布时间】:2015-01-31 07:18:37
【问题描述】:

我很好奇为什么在下面的示例中 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 评为 3,这可能是 4.5 推荐分数与以下结果的对比……

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

这是正确的吗?

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

提前致谢。

【问题讨论】:

    标签: hadoop mahout-recommender


    【解决方案1】:

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

    • 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: 它允许交叉共现类型指标计算,因此您可以使用用户位置、喜欢和不喜欢、查看和购买。几乎可以使用整个用户点击流。但只有将一个动作与规范的“最佳”动作相关联的交叉同时出现,即您想要推荐的动作。

    【讨论】:

    • 我有一个后续问题,但看起来我需要创建一个新帖子 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多