r - mlr3 优化的集合平均
问题描述
我尝试使用超级学习器优化分类任务中两个逻辑回归的平均预测。
我感兴趣的衡量标准是classif.auc
mlr3
帮助文件告诉我( ?mlr_learners_avg
)
使用权重(按数据中出现的顺序)对预测进行平均,这些权重使用“nloptr”包中的非线性优化对 measure 中提供的度量进行优化( LearnerClassifAvg 的默认值为 classif.acc,LearnerRegrAvg 的默认值为 regr.mse)。学习的权重可以从 $model 获得。SuperLearner R 包中实现了使用非线性优化。如需更详细的分析,请参阅 LeDell (2015)。
关于此信息,我有两个问题:
当我查看源代码时,我认为
LearnerClassifAvg$new()
默认为"classif.ce"
,这是真的吗?我想我可以将其设置classif.auc
为param_set$values <- list(measure="classif.auc",optimizer="nloptr",log_level="warn")
帮助文件指的是
SuperLearner
软件包和LeDell 2015。正如我正确理解的那样,上述论文中提出的“通过元学习最大化 AUC”解决方案在mlr3
? 还是我错过了什么?这个解决方案可以应用mlr3
吗?在mlr3
书中我找到了关于调用外部优化函数的段落,这可能SuperLearner
吗?
解决方案
据我了解,LeDell2015提出并评估了一种通用策略,通过学习最优权重将 AUC 优化为黑盒函数。他们并没有真正提出最佳策略或任何具体的默认值,所以我研究了SuperLearner包的 AUC 优化策略的默认值。
假设我正确理解了这篇论文:
LearnerClassifAvg
基本上实现了LeDell2015中提出的内容,即它使用非线性优化来优化任何度量的权重。LeDell2015 专注于优化AUC的特例。正如您正确指出的那样,通过将度量设置为"classif.auc"
您可以获得优化 AUC 的元学习器。关于使用哪个优化例程的默认值在mlr3pipelines和SuperLearner包之间存在偏差,我们在其中使用NLOPT_LN_COBYLA
和SuperLearner ... 通过optim
函数使用 Nelder-Mead 方法来最小化排名损失(来自文档)。
因此,为了获得完全相同的行为,您需要实现Nelder-Mead
bbotk::Optimizer
与此处类似的方法,它只是stats::optim
用方法包装Nelder-Mead
并仔细比较设置和停止条件。我相当有信心NLOPT_LN_COBYLA
提供一些可比较的结果,LeDell2015对不同的优化器进行了比较以供进一步参考。
感谢您在文档中发现错误。我同意,描述有点不清楚,我会努力改进它!