首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mlr3调优过程中使用nloptr时添加梯度函数

如何在mlr3调优过程中使用nloptr时添加梯度函数
EN

Stack Overflow用户
提问于 2022-02-23 07:10:32
回答 1查看 80关注 0票数 2

在mlr3调优步骤中,我尝试使用bfgs作为优化问题的求解器。我检查了文档,以了解如何添加求解程序所需的渐变。

虽然我能够将它添加到纯nloptr中,但我无法在bbotk或mlr3级别上这样做。一个极小的例子说明了我的意思:

代码语言:javascript
复制
library(mlr3)
library(paradox)
library(mlr3tuning)

inner_resampling = rsmp("cv", folds = 5)
terminator <- trm("evals",n_evals = 10)
tsk <- tsk("pima")
learner <- lrn("classif.rpart")

search_space <- ps(
   cp = p_dbl(lower = 1e-4, upper = 0.1)
)

tuner <- tnr("nloptr",algorithm = "NLOPT_LD_LBFGS")
inst <- TuningInstanceSingleCrit$new(
                                    task = tsk,
                                    learner = learner,
                                    resampling = inner_resampling,
                                    terminator = terminator
                                    search_space = search_space,
                                    measure = msr("classif.ce")
                                    )
tuner$optimize(inst)

结果是:

代码语言:javascript
复制
Error in is.nloptr(ret) : 
  A gradient for the objective function is needed by algorithm NLOPT_LD_LBFGS but was not supplied.

当选择无梯度算法(例如NLOPT_LN_BOBYQA)时,一切都很好。

我现在的问题是:这一般都有可能吗?还是基于梯度的算法不适用于bbotk抽象级别及以上?我试着检查代码(尽可能为我:-),但是我没有找到添加梯度函数的槽。

提前谢谢彼得

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 15:46:48

在这种黑匣子优化中没有梯度。原则上,您可以通过经验确定梯度,但这违背了试图通过尽可能少的评估来实现性能改进的精神。

没有计划支持在mlr3中进行调优的梯度。当然,如果您对此感兴趣,欢迎您提供:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71232647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档