我正在尝试在mahout中使用基于项目的推荐器。它包含2.5 M用户,项目交互,没有首选项值。有大约100个项目和10万用户。推荐大约需要10秒。而对于相同的数据,当我使用基于用户的推荐器时,它只需不到一秒钟。
ItemSimilarity sim = new TanimotoCoefficientSimilarity(dm);
CandidateItemsStrategy cis = new SamplingCandidateItemsStrategy(10,10,10,dm.getNumUsers(),dm.getNumItems());
MostSimilarItemsCandidateItemsStrategy mis = new SamplingCandidateItemsStrategy(10,10,10,dm.getNumUsers(),dm.getNumItems());
Recommender ur = new GenericBooleanPrefItemBasedRecommender(dm,sim,cis,mis);
我读了@Sean的答案之一,他建议将上述参数用于SamplingCandidateItemsStrategy。但我不确定它到底是做什么的。
编辑: 2.5 M是用户项目关联总数,有100K用户,项目总数为100。
答案 0 :(得分:1)
在众多原因中,选择基于项目的推荐者的主要原因是:if the number of items is relatively low compared to the number of users, the performance advantage could be significant
。
这反过来也是如此。 If the number of users is relatively low compared to the number of items, choosing user-based recommendation will result in performance advantage
。
根据您的问题,我真的没有得到数据集中的项目数以及用户数。一旦你提到2.5M然后100K?在任何情况下,如果基于用户的推荐对您来说更快,您应该选择这种方法。
除非您的项目项相似性更加固定(预计不会发生根本变化或经常变化),否则它们是预计算的更好候选者。您可以进行预计算并使用项目之间的预先计算的相似性。
此外,由于您没有偏好值,并且如果您想使用基于项目的相似性,您可以考虑根据项目的某些特征丰富相似度函数和一些纯项目项目相似性。 (这只是一个想法)。