【问题标题】:How to structure data in order to use item preference recommendation in mahout如何构建数据以便在 mahout 中使用项目偏好推荐
【发布时间】:2011-09-22 00:11:14
【问题描述】:

首先是 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 作为评级,但实际上它应该是二进制真的),但所有用户的所有建议都是总是相同的产品列表。

有什么建议吗?

【问题讨论】:

    标签: mahout


    【解决方案1】:

    (顺便说一下,这个数据太稀少了,我不知道推荐人是否真的会推荐项目 1。)

    如果您已经预先计算了项目-项目相似性,那么您引用的代码 sn-p 将是您使用的代码。你这里没有那个;你有用户-项目关联。您确定要从这些数据中计算出这些相似性,然后将其用于推荐吗?

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

    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中有相当详细的介绍。)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多