首页 > 解决方案 > mlr3 优化的集合平均

问题描述

我尝试使用超级学习器优化分类任务中两个逻辑回归的平均预测。

我感兴趣的衡量标准是classif.auc

mlr3帮助文件告诉我( ?mlr_learners_avg)

使用权重(按数据中出现的顺序)对预测进行平均,这些权重使用“nloptr”包中的非线性优化对 measure 中提供的度量进行优化( LearnerClassifAvg 的默认值为 classif.acc,LearnerRegrAvg 的默认值为 regr.mse)。学习的权重可以从 $model 获得。SuperLearner R 包中实现了使用非线性优化。如需更详细的分析,请参阅 LeDell (2015)。

关于此信息,我有两个问题:

  1. 当我查看源代码时,我认为LearnerClassifAvg$new()默认为"classif.ce",这是真的吗?我想我可以将其设置classif.aucparam_set$values <- list(measure="classif.auc",optimizer="nloptr",log_level="warn")

  2. 帮助文件指的是SuperLearner软件包和LeDell 2015。正如我正确理解的那样,上述论文中提出的“通过元学习最大化 AUC”解决方案在mlr3? 还是我错过了什么?这个解决方案可以应用mlr3吗?在mlr3书中我找到了关于调用外部优化函数的段落,这可能SuperLearner吗?

标签: rmlr3superlearner

解决方案


据我了解,LeDell2015提出并评估了一种通用策略,通过学习最优权重将 AUC 优化为黑盒函数。他们并没有真正提出最佳策略或任何具体的默认值,所以我研究了SuperLearner包的 AUC 优化策略的默认值。

假设我正确理解了这篇论文:

LearnerClassifAvg基本上实现了LeDell2015中提出的内容,即它使用非线性优化来优化任何度量的权重。LeDell2015 专注于优化AUC的特例。正如您正确指出的那样,通过将度量设置为"classif.auc"您可以获得优化 AUC 的元学习器。关于使用哪个优化例程的默认值在mlr3pipelinesSuperLearner包之间存在偏差,我们在其中使用NLOPT_LN_COBYLASuperLearner ... 通过optim函数使用 Nelder-Mead 方法来最小化排名损失来自文档)。

因此,为了获得完全相同的行为,您需要实现Nelder-Mead bbotk::Optimizer 与此处类似的方法,它只是stats::optim用方法包装Nelder-Mead并仔细比较设置和停止条件。我相当有信心NLOPT_LN_COBYLA提供一些可比较的结果,LeDell2015对不​​同的优化器进行了比较以供进一步参考。

感谢您在文档中发现错误。我同意,描述有点不清楚,我会努力改进它!


推荐阅读