使用mlr3tuning::ti调参遇报错及版本兼容问题,咨询函数可用性
关于mlr3中mlr3tuning::ti()函数的使用问题
报错复现示例
执行调参流程时出现报错,可复现代码及错误信息如下:
task <- tsk("sonar") tuner <- mlr3tuning::tnr("mbo") instance <- mlr3tuning::ti(task = task, learner = mlr3tuningspaces::lts(mlr3::lrn("classif.rpart", predict_type = "prob")), resampling = mlr3::rsmp("cv", folds = 5) , measures = mlr3::msrs(c("classif.auc", "classif.ce")), terminator = mlr3tuning::trm("evals", n_evals = 20)) # 弃用提示 OptimInstanceMultiCrit is deprecated. Use OptimInstanceBatchMultiCrit instead. tuner$optimize(instance) # 报错信息 Error in private$.optimizer$optimize(inst) : attempt to apply non-function
CRAN加载包时的版本冲突错误
仅从CRAN加载包时,出现版本依赖错误:
Loading required package: mlr3tuning Loading required package: paradox Error: package or namespace load failed for ‘mlr3tuning’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]): namespace ‘mlr3misc’ 0.15.0 is already loaded, but >= 0.15.0.9000 is required Error: package ‘mlr3tuning’ could not be loaded
问题解答
1. ti()函数并未被移除
ti()是tune()的简写函数,当前仍可使用,报错源于版本依赖冲突和多目标调参实例的版本兼容问题。
2. 解决版本冲突问题
CRAN版的mlr3tuning依赖更高版本的mlr3misc(要求≥0.15.0.9000),但当前安装的是CRAN版mlr3misc 0.15.0,导致加载失败。解决步骤:
- 卸载旧版mlr3misc并安装开发版:
remove.packages("mlr3misc") remotes::install_github("mlr-org/mlr3misc")
- 同步更新mlr3tuning到适配版本:
remotes::install_github("mlr-org/mlr3tuning")
3. 解决多目标调参的实例兼容问题
使用两个评价指标属于多目标调参场景,旧的OptimInstanceMultiCrit已被弃用,需改用新版的OptimInstanceBatchMultiCrit:
方式一:直接创建新版多目标实例
instance <- mlr3tuning::TuningInstanceBatchMultiCrit$new( task = task, learner = mlr3tuningspaces::lts(mlr3::lrn("classif.rpart", predict_type = "prob")), resampling = mlr3::rsmp("cv", folds = 5), measures = mlr3::msrs(c("classif.auc", "classif.ce")), terminator = mlr3tuning::trm("evals", n_evals = 20) ) tuner$optimize(instance)
注意:部分调参器(如mbo)对多目标场景有额外配置要求,若仍报错,可先尝试单目标调参验证功能是否正常:
# 单目标调参示例 instance <- mlr3tuning::ti(task = task, learner = mlr3tuningspaces::lts(mlr3::lrn("classif.rpart", predict_type = "prob")), resampling = mlr3::rsmp("cv", folds = 5), measures = mlr3::msr("classif.auc"), terminator = mlr3tuning::trm("evals", n_evals = 20)) tuner$optimize(instance)
内容的提问来源于stack exchange,提问作者Pierre Levoisin
相关产品推荐
相关产品推荐

