我正在尝试使用实例调整一些模型,因此有一个包含多个模型的分支步骤。我已经构建了管道并且在没有需要 trafos 的模型的情况下工作。设置了参数,并且依赖项工作正常。我使用 trafos 是因为我更喜欢在指数范围内搜索,而不是线性搜索某些参数。trafos 在添加依赖项之前工作,但显然管道在没有依赖项的情况下无法工作。添加依赖项会破坏 trafos。
有趣的是,在创建一个代表时,我意识到错误不需要任务、管道等,它发生在 trafo/参数集的级别,但只有当管道中有超过 1 个学习者时!
错误消息是Error in exp(x$classif.svm.gamma) : non-numeric argument to mathematical function
。
library(mlr3verse)
ps <- ParamSet$new(list(
ParamFct$new("branch2.selection", levels = c('classif.rpart', 'classif.svm')),
ParamDbl$new("classif.rpart.cp", lower = 0, upper = 0.05),
ParamDbl$new("classif.svm.gamma", lower = -9L, upper = -5L),
ParamInt$new("classif.svm.cost", lower = -2L, upper = 2L)
))
ps$trafo <- function(x, param_set) {
x$classif.svm.cost = 2^(x$classif.svm.cost)
x$classif.svm.gamma = exp(x$classif.svm.gamma)
x
}
ps$add_dep("classif.rpart.cp", 'branch2.selection', CondEqual$new("classif.rpart"))
ps$add_dep("classif.svm.gamma", 'branch2.selection', CondEqual$new("classif.svm"))
ps$add_dep("classif.svm.cost", 'branch2.selection', CondEqual$new("classif.svm"))
generate_design_grid(ps, resolution = 6)
generate_design_grid(ps, resolution = 6)$transpose()
同样,该错误仅在有多个学习者并因此需要依赖项时才会发生(只要它是唯一的学习者,它就可以与分支/取消分支一起使用),并且它使网格在没有该transpose()
功能的情况下也很好。
我想知道是否需要为 trafo 编写不同的代码才能在依赖项下正常运行。