Mahout 推荐引擎

3

Apache Mahout 推荐系统文档 中提到了以下内容:

// Construct the list of pre-computed correlations
Collection <GenericItemSimilarity.ItemItemSimilarity>  correlations = ...;

我不确定上述行中实际的构造方式是什么。能否有人提供一个例子?

ItemSimilarity itemSimilarity  =  new GenericItemSimilarity(correlations);
2个回答

3

这个例子是指已经通过Hadoop作业计算出相似性并将其存储在文件系统或数据库中的情况。正如构造函数文档所述:

一个"通用"的{@link ItemSimilarity},它采用一组静态预先计算好的项目相似性,并仅基于这些响应值。这些值可以由另一个进程离线预先计算出来,存储在文件中,然后读取并提供给此类的实例。

如果您只有数千万个或更少的推荐内容,您可以直接计算相似性并使用另一个GenericItemSimilarity构造函数- GenericItemSimilarity(ItemSimilarity otherSimilarity, DataModel dataModel)

例如:

DataModel dataModel = new FileDataModel(new File("path://to/file.csv"));
ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
ItemSimilarity itemSimilarity = new GenericItemSimilarity(itemSimilarity, dataModel);

如果你只有几千万条或更少的推荐数据,可以直接计算相似性。使用 10M movielens 数据,基于物品的推荐大约需要 22 秒才能加载,基于用户的仅需 200 毫秒。如何在基于物品的推荐中实现即时加载数千万条数据? - GedankenNebel

2

这里没有什么魔法,只是建议您创建一堆ItemItemSimilarity对象,每个对象对应您已知的每个物品之间的相似度。

Collection<GenericItemSimilarity.ItemItemSimilarity> correlations = 
  new ArrayList<GenericItemSimilarity.ItemItemSimilarity>();
correlations.add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.5));
...

你可以按照这种方式或者任何其他你想要的方式来实现。

我已经按照你在这里提到的创建了一个相关集合,并创建了以下相似性实例:new CachingItemSimilarity(new GenericItemSimilarity(correlations),dataModel.getNumItems());..使用1M MovieLens数据,我的基于项目的推荐器仅比以前快40-50%(例如589.5ms而不是1222.9ms)。但是基于用户的推荐器确实非常快,就像24.2ms?这是怎么回事?我的预计算项目相似性是否正确?我希望你也有一点时间帮助我 :) - GedankenNebel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接