Java 行家推荐人
报告提到以下内容:Java 行家推荐人,java,mahout,Java,Mahout,报告提到以下内容: // Construct the list of pre-computed correlations Collection <GenericItemSimilarity.ItemItemSimilarity> correlations = ...; 本例指的是这样一种情况,即您已经计算了相似性,例如通过Hadoop作业,并存储在文件系统或数据库中。正如构造器文档所示: 一个“泛型”{@link ItemSimilarity},它获取预先计算的项相似性的静态列表
// Construct the list of pre-computed correlations
Collection <GenericItemSimilarity.ItemItemSimilarity> correlations = ...;
本例指的是这样一种情况,即您已经计算了相似性,例如通过Hadoop作业,并存储在文件系统或数据库中。正如构造器文档所示:
一个“泛型”{@link ItemSimilarity},它获取预先计算的项相似性的静态列表,并将其响应单独基于该列表。这些值可能已由另一个进程脱机预计算,存储在文件中,然后读取并馈送到此类的实例中。
如果您有数千万条或更少的建议,您只需动态计算相似性,然后使用另一个
GenericItemSimilarity
constructor-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);
这里没有什么神奇之处,只是建议您创建一组ItemSimilarity对象,为您知道的每个项目相似性创建一个对象
Collection<GenericItemSimilarity.ItemItemSimilarity> correlations =
new ArrayList<GenericItemSimilarity.ItemItemSimilarity>();
correlations.add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.5));
...
集合关联=
新的ArrayList();
添加(新的GenericItemSimilarity.ItemSimilarity(1,2,0.5));
...
您可以通过这种方式或任何其他方式进行推荐。“如果您有数千万条或更少的推荐,您只需动态计算相似度”->使用10M movielens数据,基于项目的推荐加载大约需要22秒。。基于用户的测试只需要200毫秒。如何使用item-based动态加载数千万?我已经创建了一个相关集合,正如您在这里提到的,然后创建了以下相似性实例:new CachingItemSimilarity(new GenericItemSimilarity(correlations),dataModel.getNumItems())。。使用1M MovieLens数据,我的基于项目的推荐程序只比以前快了40-50%(比如589.5毫秒而不是1222.9毫秒)。但是基于用户的速度真的很快,就像24.2ms?这怎么会发生?我对项目相似性的预计算可以吗?我希望你也能给我一点时间:)
Collection<GenericItemSimilarity.ItemItemSimilarity> correlations =
new ArrayList<GenericItemSimilarity.ItemItemSimilarity>();
correlations.add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.5));
...