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
相关产品推荐
相关产品推荐

