【问题标题】:Interpreting the parameters of the evaluate() function of a item-based recommender in Mahout在 Mahout 中解释基于项目的推荐器的评估()函数的参数
【发布时间】:2025-12-09 07:55:01
【问题描述】:

我正在使用布尔值,试图评估 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 中的哪个位置发生,我如何更改该百分比(除非基于项目的推荐不是这种情况)?

【问题讨论】:

    标签: mahout


    【解决方案1】:

    仅靠准确的推荐并不能保证推荐系统的用户获得有效且令人满意的体验,因此测量值应仅作为参考点。也就是说,理想情况下,真实用户会根据您设置的基线(如随机推荐)使用您的系统并进行 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 代码并找出答案。

    【讨论】: