Mahout Precision Recall Movielens 10M

时间:2013-03-19 16:14:49

标签: mahout

我是推荐系统的新手。我正在努力学习Mahout,到目前为止,我认为我掌握了它。

但是,当我尝试计算Precision& amp;时,我遇到了一个相当奇怪的问题。回想一下Mahout in Action一书中的例子(清单2.4,第21页),为了更方便,我复制粘贴主体:

RandomUtils.useTestSeed();
 DataModel model = new FileDataModel (new File("intro.csv"));
 RecommenderIRStatsEvaluator evaluator =
 new GenericRecommenderIRStatsEvaluator ();
  RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
  @Override
   public Recommender buildRecommender(DataModel model)
    throws TasteException {
    UserSimilarity similarity = new PearsonCorrelationSimilarity (model);
    UserNeighborhood neighborhood =
     new NearestNUserNeighborhood (2, similarity, model);
      return
      new GenericUserBasedRecommender (model, neighborhood, similarity);
     }
   };
    IRStatistics stats = evaluator.evaluate(
    recommenderBuilder, null, model, null, 2,
    GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,
    1.0);
 System.out.println(stats.getPrecision());
 System.out.println(stats.getRecall());

当我尝试使用书中的小数据集执行上述操作时,一切都应该如此。但是,当我尝试计算Precision&回想一下使用Movielens 1M或10M,结果非常低......例如Precision和Recall @ 2等于: P:0.00573且R:0.005882

我没有想法,所以如果有人有或有过类似的问题,我会很高兴听到有解决方案......

2 个答案:

答案 0 :(得分:12)

第2.4.2节涉及到解释:对于推荐者而言,精确度和召回测试没有那么有意义,因为您实际上并不知道哪些项目是“相关”结果。您可以猜测评分较高的项目是相关的,但您不知道未评级的项目是否相关。测试相当于找出建议与最高评价项目相交的程度,这与精确/召回需要做的不同。

所以你得分很低。实际上,10%还不错。现在,0.5%非常差,是的。这意味着这不是这个数据集的好算法。

Mean average precisionAUC可能会让您对结果的质量有更广泛的了解,因为他们正在研究更大范围的结果的行为。这些都没有在Mahout中实现(无论如何都不在代码的这一部分中)。

但他们在Myrrix。我知道Grouplens 10M数据集将获得25 +%精度/召回率和14 +%平均精度,因为有unit test for this。 (我是Mahout这一部分的作者,并将其商业化为Myrrix。)如果您正在寻找能够在开箱即用的数据方面做得很好的事情,我认为值得您花时间去看看。

答案 1 :(得分:-1)

我猜问题是你的邻居大小。我记得看过一篇关于邻里大小的文章,大小只有10。尝试使用10以上的数字。