【问题标题】:Bayesian optimization for hyperparameter tuning using mlr3使用 mlr3 进行超参数调整的贝叶斯优化
【发布时间】:2021-12-29 17:51:25
【问题描述】:

mlr3 生态系统中是否有使用贝叶斯优化的超参数调谐器? 特别是作为包装函数中的参数

tuner = tnr("grid_search", resolution = 10)

?

否则,mlr3 支持的推荐调整方法是什么?

更新: 我尝试关注@Sebastian 的mlr3mbo link——尤其是“使用默认值的简单调优示例”部分。

但是,当我尝试在 tune_nested 中使用它时

rr = tune_nested(
    method = "mbo", 
    task,
    learner=lrn("surv.cv_glmnet",  nfolds=3, type.measure = "C", alpha = to_tune(0.01, 1)) ,
    inner_resampling = rsmp("cv", folds = 10), 
    outer_resampling = rsmp("cv", folds = 10), 
    measure = msr("surv.cindex"), 
    term_evals = 20
    )

我得到错误:

Error in auto_tuner(method, learner, inner_resampling, measure, term_evals,  : 
  Assertion on 'method' failed: Must be element of set {'cmaes','design_points','gensa','grid_search','irace','nloptr','random_search'}, but is 'mbo'.
Calls: tune_nested ... auto_tuner -> assert_choice -> makeAssertion -> mstop

UPDATE2:按照@Sebastian 的有益建议使用devtools::install_github("mlr-org/mlr3mbo@add_tuner") 后,我收到以下错误消息:

Error in .__ParamSet__search_space(self = self, private = private, super = super,  : 
  Assertion on 'names(values)' failed: Must have names.

lrn() 中的alpha = to_tune(0.01, 1) 是否没有充分指定 HP alpha 所需的名称和值范围?

有没有办法解决这个问题?谢谢!

解决方案: 感谢@Sebastian 解决了这个问题——在他的评论中:

search_space = ps(alpha = p_dbl(0.01, 1)) 一样手动定义search_space,然后将其作为search_space 参数传递给 tune_nested

超级棒!

【问题讨论】:

  • 我想你正在寻找的描述在their book
  • 贝叶斯优化也可以使用mlr3mbo
  • 我很快就做到了,它似乎工作正常,但不能保证。只需运行 devtools::install_github("mlr-org/mlr3mbo@add_tuner") 即可安装分支
  • 如果像search_space = ps(alpha = p_dbl(0.01, 1))一样手动定义search_space,然后将其作为search_space参数传递给tune_nested,是否还会出现错误?
  • +1 !!!谢谢@塞巴斯蒂安!!这行得通!我还将您的评论添加到主要帖子中,以防它帮助其他人。再次感谢!

标签: r bayesian hyperparameters mlr3


【解决方案1】:

只需签入以添加一些 cmets 并回答您的最新问题@Alex: 关于错误的小说明:

Error in .__ParamSet__search_space(self = self, private = private, super = super,  : 
  Assertion on 'names(values)' failed: Must have names.

这是由于旧的bbotk/paradox 版本已在上游修复,您很可能不会再遇到任何错误。不再需要手动修复。

BO Tuner 将驻留在mlr3mbo 中,PR 将很快合并。

一般而言,mlr3mbo 会缓慢但稳定地达到可以认为是稳定的程度,并将被推送到 CRAN。我同意仍然缺少一些文档。此外,近期还将提供一到两个关于mlr3mbo 内部运作的画廊帖子。

关于:

One last question: is there a reference for how the optimiser works, eg the maths behind it? I searched and only found mlr3mbo.mlr-org.com/reference/mlr_optimizers_mbo.html which doesn't have many details.

所有当前的实现都是一些标准/基本的 BO 东西,因此我们目前没有包括算法的详细描述(但我们将来可能会这样做)。

(sequential) (single-criteria) BO(例如,在bayesopt_ego 中实现)通过将Surrogate 模型拟合到您的评估点来工作,学习输入和输出之间的关系。基于一个获取函数AcqFunction(依赖于这个代理),它为每个潜在的下一个候选者进行编码以评估评估中的收益(即,如果我评估这个候选者,我可以期望改进我的解决方案多少)你找到下一点查询、评估它并更新评估点的存档,然后重新开始重新调整代理项。

我强调了各自的类/函数,其中大部分都包含对标准论文的引用,您可以在其中了解有关数学/技术细节的更多信息。

另外,如果您发现 mlr3mbo 有用或有任何其他 cmets/问题,请随时通过 GitHub https://github.com/mlr-org/mlr3mbo 与我们交流。欢迎提出问题/未决问题等!

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 2017-06-11
    • 2020-10-26
    • 2019-09-22
    • 2019-01-12
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多