2

首先是 mahout、apache、maven 等的新手——如果这很明显,请道歉。

我有一个典型的购物篮数据集,即

用户 1,项目 1

用户 1,项目 2

用户 2,项目 1

用户 2,项目 3

用户 3,项目 2

我的查询 - 对 user3 有什么建议?(是的,我知道答案是 item1!)。

我如何构建它以在 Mahout 中使用?我查看了页面 - https://cwiki.apache.org/MAHOUT/recommender-documentation.html - 这非常有用 - 但就在我想要有趣的位时 - 即如何构建相关数据 - 它说:

// Construct the list of pre-computed correlations
Collection<GenericItemSimilarity.ItemItemSimilarity> correlations =
          ...;
ItemSimilarity itemSimilarity =
          new GenericItemSimilarity(correlations);

而我要计算的那一点是缺失的......!

虽然这完全是错误的做法,但我调整了我的数据集,使其看起来与 movielens 结构相同(给出 5 作为评级,但实际上它应该是二进制真的),但所有用户的所有建议始终相同产品清单。

请问有什么建议吗?

4

1 回答 1

2

(顺便说一下,这个数据太稀少了,我不知道推荐人实际上会推荐第 1 项。)

如果您已经有预先计算的项目相似性,那么您引用的代码片段就是您使用的代码片段。你这里没有那个;你有用户-项目关联。当然,您的意思是从这些数据中计算出这些相似性,并将其用于推荐?

虽然您可以通过编程方式执行此操作,但我建议使用您的数据制作一个简单的文本文件会更快......

1,1
1,2
2,1
2,3
3,2

然后使您的基于项目的推荐器具有对数似然相似性:

DataModel model = new FileDataModel(new File("yourdata.txt"));
ItemSimilarity similarity = new LogLikelihoodSimilarity(model);
Recommender recommender = 
    new GenericBooleanPrefItemBasedRecommender(similarity, model);

并为用户 3 推荐 1 项:

recommender.recommend(3, 1);

(这在Mahout in Action中有相当详细的介绍。)

于 2011-09-21T16:11:14.837 回答