2

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

但是,当我尝试使用 Mahout in Action (Listing 2.4, page 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());

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

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

4

2 回答 2

12

第 2.4.2 节涉及解释:精确度和召回率测试对推荐者来说意义不大,因为您实际上并不知道哪些项目是“相关”结果。您可以猜测高评分的项目是相关的,但您不知道未评分的项目是否相关。测试相当于找出推荐与评分最高的项目有多少相交,这并不是精确/召回需要做的。

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

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

但他们在Myrrix。我知道您将在 Grouplens 10M 数据集上获得 25+% 的精度/召回率和 14+% 的平均精度,因为对此有一个单元测试。(我是 Mahout 这一部分的作者,并将其作为 Myrrix 进行商业化。)如果您正在寻找可以开箱即用的此类数据的出色工作,我认为值得您花时间看着。

于 2013-03-19T17:22:25.307 回答
-1

我想问题是你的社区规模。我记得看到一篇关于邻域大小的文章,10 的大小很少。尝试使用 10 以上的数字。

于 2016-03-04T19:28:44.720 回答