解释Mahout中基于项目的推荐者的evaluate()函数的参数

时间:2013-02-18 17:23:24

标签: mahout

我正在使用布尔值,尝试评估Mahout中的推荐引擎。我的问题是关于评估函数的“正确”参数的选择。为这篇冗长的帖子提前道歉。

  IRStatistics evaluate(RecommenderBuilder recommenderBuilder,
                        DataModelBuilder dataModelBuilder,
                        DataModel dataModel,
                        IDRescorer rescorer,
                        int at,
                        double relevanceThreshold,
                        double evaluationPercentage) throws TasteException;

1)你能想到一个必须使用以下两个参数的例子:

 - DataModelBuilder dataModelBuilder
 - IDRescorer rescorer

2)对于double relevanceThreshold变量,我设置了值GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,但是,我想知道是否可以通过设置不同的值来构建“更好”的模型。

3)在我的项目中,我需要为每个用户推荐最多10个项目。这是否意味着为变量int at设置大于10的值是没有意义的?

4)如果我不需要等待很多时间来构建模型,那么将变量double evaluationPercentage设置为等于1是一个好习惯吗?你能想到1不会给出最佳模型的情况吗?

5)为什么精确/召回(注意我正在研究布尔数据)只要推荐数量(即变量int at)增加(我通过实验证明)就会增加?

6)spiting of both testing and training tests在mahout中发生在哪里,我怎样才能改变这个百分比(除非基于项目的建议不是这样)?

1 个答案:

答案 0 :(得分:2)

单独准确的建议并不能保证推荐系统的用户获得有效且令人满意的体验,因此测量应仅作为参考点。也就是说,理想情况下,真实用户会根据您设置的基线(如随机推荐)使用您的系统,并进行A / B测试并查看哪些具有更好的性能。但这可能很麻烦而且不太实际。

N推荐的精确度和召回率对于推荐者来说并不是一个很好的指标。你最好使用像AUC这样的指标(曲线下面积)

  1. 查看Mahout in Action书籍示例(link
  2. 让Mahout选择一个门槛很好,但计算成本会更高
  3. 是的,如果你要提出10条建议,那么在10点评估会很有意义
  4. 确实取决于您的数据大小。如果使用100%(即1.0)足够快,我会使用它。但是如果你确实使用了不同的东西(更少),我强烈建议你在测试时使用RandomUtils.useTestSeed();,这样你就知道每次评估时抽样都会以同样的方式完成。 (不要在生产中使用它)
  5. 不确定。取决于您的数据的样子。但通常如果精度增加,召回减少,反之亦然。见F1 Score(也可从Mahout IRStatistics获得)
  6. 对于IRStatistics,我不完全确定它发生的位置(或者它是否发生)。请注意,它甚至没有将%用于训练和测试。虽然某处可能存在默认值。如果我是你,我会通过Mahout代码找出来。