1

我正在使用布尔值,试图评估 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 个项目。这是否意味着为 variable 设置大于 10 的值应该没有意义int at

4) 考虑到我不必为构建模型等待很多时间而烦恼,将变量设置double evaluationPercentage为 1 是一个好习惯吗?你能想到 1 不会给出最佳模型的任何情况吗?

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

6)spiting of both testing and training tests在 mahout 中发生了什么,我该如何更改该百分比(除非基于项目的建议不是这种情况)?

4

1 回答 1

2

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

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

  1. 看看 Mahout in Action 书籍示例(链接
  2. 让 Mahout 选择一个阈值很好,但计算量会更大
  3. 是的,如果您提出 10 条建议,那么以 10 条进行评估很有意义
  4. 真的取决于你的数据的大小。如果使用 100%(即 1.0)足够快,我会使用它。但是,如果您确实使用了不同(更少)的东西,我强烈建议您RandomUtils.useTestSeed();在测试时使用,这样您就知道每次评估时都会以相同的方式进行抽样。(虽然不要在生产中使用它)
  5. 没有把握。取决于您的数据的外观。但通常如果精度增加,召回率会降低,反之亦然。查看F1 分数(也可从 Mahout IRStatistics 获得)
  6. 对于 IRStatistics,我不完全确定它发生在哪里(或者它是否发生)。请注意,它甚至不需要 % 来划分训练和测试。尽管某处可能存在默认值。如果我是你,我会通过 Mahout 代码找出答案。
于 2013-02-18T17:50:02.913 回答