【问题标题】:Rewriting ParamSet ids from mlr3::paradox()从 mlr3::paradox() 重写 ParamSet id
【发布时间】:2022-12-18 02:49:00
【问题描述】:

假设我有以下 ParamSet 对象:

my_ps = paradox::ps(
    minsplit = p_int(1, 64, logscale = TRUE),
    cp = p_dbl(1e-04, 1, logscale = TRUE))

是否可以在不更改任何其他内容的情况下将minsplit 重命名为survTree.minsplit

这样做的原因是我使用一些学习者作为 GraphLearner 的一部分,因此他们的参数名称发生了变化,我希望有一些代码在参数前面添加 learner$id 以便稍后用于调整(而不是重写他们用新名字从头开始)

【问题讨论】:

  • 嘿,抱歉回复晚了!我认为如果不使用有点老套的解决方案,当前的 API 是不可能做到这一点的。我也不确定它是否可以轻松实施。
  • 我确实尝试破解它,我记得是从 data.table 表单中获取的,但后来一些 ID 在 AutoTuner-ing 期间不匹配,所以我完全明白了!

标签: mlr3


【解决方案1】:

我想我在这里有一个部分解决方案。它只是部分的,因为它不支持转换。

它在哪里工作:

library(paradox)

my_ps = paradox::ps(
  minsplit = p_int(1, 64),
  cp = p_dbl(1e-04, 1)
)

my_ps$set_id = "john"

my_psc = ParamSetCollection$new(list(my_ps))

print(my_psc)
#> <ParamSetCollection>
#>               id    class lower upper nlevels        default value
#> 1: john.minsplit ParamInt 1e+00    64      64 <NoDefault[3]>      
#> 2:       john.cp ParamDbl 1e-04     1     Inf <NoDefault[3]>

reprex package (v2.0.1) 创建于 2022-12-07

哪里没有:

library(paradox)

my_ps = paradox::ps(
  minsplit = p_int(1, 64, logscale = TRUE),
  cp = p_dbl(1e-04, 1)
)

my_ps$set_id = "john"

my_psc = ParamSetCollection$new(list(my_ps))
#> Error in .__ParamSetCollection__initialize(self = self, private = private, : Building a collection out sets, where a ParamSet has a trafo is currently unsupported!

reprex package (v2.0.1) 创建于 2022-12-07

潜在的问题是我们没有解决如何协调各个 ParamSets 的参数转换和 ParamSetCollection 的可能参数转换的问题。

我担心目前没有解决您的问题的完美方法。

【讨论】:

    【解决方案2】:

    抱歉,我还不能发表评论,这不是您正在寻找的解决方案,但我希望这能解决您遇到的问题。

    您可以在学习者中设置param_space,然后再将其放入图表中,即坚持您的搜索空间。定期创建 GraphLearner 后,它将具有所需的搜索空间。

    一个具体的例子:

    library(mlr3verse)
    
    learner = lrn("regr.rpart", cp = to_tune(0.1, 0.2))
    
    glrn = as_learner(po("pca") %>>% po("learner", learner))
    
    at = auto_tuner(
      "random_search",
      glrn,
      rsmp("holdout"),
      term_evals = 10
    )
    
    task = tsk("mtcars")
    
    at$train(task)
    

    【讨论】:

    • 嗨,卢卡斯,是的,那行得通!但有可能吗?我试图将 ps = ps(lambda = p_dbl(1e-03, 10, logscale = TRUE)) 设置为模型 coxnet = lrn('surv.glmnet', id = 'CoxNet') 但无法做到 - 例如coxnet$param_set 是只读的。还有别的办法吗?
    • 我认为他的意思是,您可以首先使用 to_tune() 标记为学习器设置参数,然后当您将学习器包装在图形学习器中时,图形学习器将了解如何调节学习器的参数
    • 这个问题我没有那个解决方案,因为我想单独拥有参数空间(更模块化),其次其中一些不能用to_tune()编写或者很难写(即看到这个stackoverflow.com/questions/73527213/…你的答案:)
    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 2017-05-18
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-03-07
    • 1970-01-01
    相关资源
    最近更新 更多