我很好奇为什么在下面的示例中,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对其进行了评级。数据集太小了吗?
提前致谢。
答案 0 :(得分:2)
您的数据中可能存在多个错误,前两个错误会导致未定义的行为:
除非您尝试预测用户对某个项目的评分,否则很少使用偏好值。偏好权重在确定推荐排名时无用,这是优化的典型事项。如果您想以正确的顺序推荐正确的东西,请抛出值并使用LLR。
人们有时会对价值观做的另一件事是显示一些偏好权重,因此1 =产品页面的视图,5 =产品购买。 这不起作用!我尝试使用大型电子商务数据集,发现在添加产品视图时建议更糟糕,即使数据量增加了100倍。它们具有根本不同的用户操作,具有不同的用户意图,因此不能以这种方式混合。
如果你确实想要混合不同的动作,请使用基于Mahout,Spark和Solr的新多模式推荐器on the Mahout site here:它允许交叉共生类型指示器计算,这样你就可以使用用户位置,喜欢和不喜欢,查看和购买。实际上,可以使用整个用户点击流。但只有交叉共同将一个动作与规范的“最佳”动作联系起来,即你想要推荐的动作。