You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mlr3手动实现超参数仅训练集优化、测试集预测的代码问题

手动实现mlr3超参数优化(训练集调参+测试集预测)遇错记录

我在学习mlr3超参数优化内容时,希望手动完成仅在训练集上优化超参数、后续仅在测试集上预测的流程,不使用章节介绍的auto_tune命令,但执行代码时出现错误。以下是相关代码、报错信息及后续尝试的代码:

初始报错代码

library(mlr3tuning)
library(mlr3tuningspaces)
library(mlr3learners)
library(mlr3extralearners)
library(e1071)
library(paradox)

# 指定任务
tsk_sonar = tsk("sonar")
tsk_sonar$set_col_roles("Class", c("target", "stratum"))

# 划分训练集与测试集
splits = mlr3::partition(tsk_sonar, ratio = 0.80)

# 定义学习器及超参数优化范围
learner = lrn("classif.svm",
  cost  = to_tune(1e-5, 1e5, logscale = TRUE),
  gamma = to_tune(1e-5, 1e5, logscale = TRUE),
  kernel = "radial",
  type = "C-classification"
)

# 指定训练集行ID并执行训练
learner$train(tsk_sonar, row_ids = splits$train)

错误信息

> learner$train(tsk_sonar, row_ids = splits$train)
Error in svm.default(x = data, y = task$truth(), probability = (self$predict_type ==  : 
  'list' object cannot be coerced to type 'double'

后续尝试代码

# 创建调参实例
instance = ti(
  task = tsk_sonar,
  learner = learner,
  resampling = rsmp("cv", folds = 3),
  measures = msr("classif.ce"),
  terminator = trm("none")
)

# 定义超参数搜索策略
tuner = tnr("grid_search", resolution = 5, batch_size = 10)

# 运行超参数优化
tuner$optimize(instance)

# 初始化带最优参数的学习器
lrn_svm_tuned = lrn("classif.svm")
lrn_svm_tuned$param_set$values = instance$result_learner_param_vals

# 训练最终模型(注:此处原代码用了全量数据,正确做法应仅用训练集)
lrn_svm_tuned$train(tsk_sonar)$model

# 在测试集上生成预测结果
prediction = lrn_svm_tuned$predict(tsk_sonar, splits$test)

内容的提问来源于stack exchange,提问作者Charles Green

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:44:55