Mahout Precision Recall Movielens 10M

use*_*329 2 mahout

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

但是,当我尝试使用Mahout in Action(清单2.4,第21页)中的示例计算Precision&Recall时,我遇到了一个相当奇怪的问题,为了更方便,我在这里复制粘贴主体:

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());
Run Code Online (Sandbox Code Playgroud)

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

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

Sea*_*wen 12

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

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

平均精度AUC可能会让您对结果的质量有更广泛的了解,因为他们正在研究更大范围的结果的行为.这些都没有在Mahout中实现(不管怎么说都不在代码的这一部分).

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