【问题标题】:How to tune a vector of two values in mlr3如何在 mlr3 中调整两个值的向量
【发布时间】:2022-02-21 11:02:37
【问题描述】:

使用混合方法的生存 SVM 模型要求 gamma.mu 是一个向量,如下所示。在这种情况下,我们如何调整 gamma.mu?

lrn(\"surv.svm\", type = \"hybrid\", diff.meth = \"makediff3\", gamma.mu=c(0.1, 0.1))

标签: mlr3


【解决方案1】:

您需要分别调整向量的各个部分,然后在转换中组合。您可能会发现 this tutorial 很有帮助。下面的例子

library(mlr3)
library(mlr3proba)
library(mlr3tuning)
library(mlr3extralearners)

t = tgen("simsurv")$generate(5)

search_space = ps(
  gamma = p_dbl(1e-3, 1e3),
  mu = p_dbl(1e-3, 1e3)
)
search_space$trafo = function(x, param_set) {
  x$gamma.mu = c(x$gamma, x$mu)
  x$gamma = x$mu = NULL
  x
}

AutoTuner$new(
  lrn("surv.svm", type = "hybrid", diff.meth = "makediff3",
        gamma.mu = c(0.1, 0.1)),
  rsmp("holdout"),
  msr("surv.cindex"),
  trm("evals", n_evals = 3),
  tnr("grid_search", resolution = 2),
  search_space
)$train(t)$predict(t)
#> INFO  [21:40:21.261] [bbotk] Starting to optimize 2 parameter(s) with '<OptimizerGridSearch>' and '<TerminatorEvals> [n_evals=3]' 
#> INFO  [21:40:21.275] [bbotk] Evaluating 1 configuration(s) 
#> INFO  [21:40:21.294] [mlr3] Running benchmark with 1 resampling iterations 
#> INFO  [21:40:21.315] [mlr3] Applying learner 'surv.svm' on task 'simsurv' 
#> INFO  [21:40:21.425] [bbotk] Finished optimizing after 3 evaluation(s) 
#> INFO  [21:40:21.425] [bbotk] Result: 
#> INFO  [21:40:21.426] [bbotk]  gamma   mu learner_param_vals  x_domain surv.cindex 
#> INFO  [21:40:21.426] [bbotk]  0.001 1000          <list[3]> <list[1]>           1
#> <PredictionSurv> for 5 observations:
#>  row_ids     time status      crank  response
#>        1 5.000000  FALSE -22.915171 22.915171
#>        2 5.000000  FALSE  -1.442179  1.442179
#>        3 3.640326   TRUE   3.849970 -3.849970
#>        4 0.268220   TRUE   4.269720 -4.269720
#>        5 5.000000  FALSE  -2.670886  2.670886

reprex package (v2.0.1) 于 2022 年 2 月 19 日创建

【讨论】:

  • 谢谢@RaphaelS。可以定义带有转换的向量的搜索空间,而不是像下面的 lrn() 吗? ``` lrn("surv.svm", type = "hybrid", diff.meth = "makediff3", gamma.mu = to_tune(p_dbl(-5, 1, trafo = function(x) )), kernel = to_tune (p-fct(c("lin_kernel", "add_kernel", "rbf_kernel")))) ```
  • 我不这么认为,因为转换是在参数集级别而不是参数级别应用的。但如果我错了,也许团队中的其他人会纠正我
  • 我认为有可能 lrn("surv.svm", type = "hybrid", diff.meth = "makediff3", ps(gamma = p_dbl(0, 10), mu = p_dbl(0, 10), .extra_trafo =函数(x, param_set) { x$surv.svm.gamma.mu = c(x$gamma, x$mu) x$gamma = x$mu = NULL x}))
猜你喜欢
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2021-01-25
  • 2012-11-03
相关资源
最近更新 更多