基于R mlr3提取Pipeline中各模型预测及AutoTuner集成问题
问题解答
一、提取集成前单个模型的预测
因为你在创建AutoTuner时设置了store_models = TRUE,训练完成后可以直接从训练好的图学习器中获取每个基模型,进而生成它们的预测结果,具体步骤如下:
- 取出训练后的图学习器实例:
trained_graph = at$learner$model
- 获取单个训练好的基模型:
# 获取训练后的ranger模型 trained_ranger = trained_graph$pipeops$ranger$learner # 获取训练后的xgboost模型 trained_xgboost = trained_graph$pipeops$xgboost$learner
- 生成单个模型的预测,并与集成模型对比性能:
# 生成各模型预测 pred_ranger = trained_ranger$predict(task) pred_xgboost = trained_xgboost$predict(task) pred_ensemble = at$predict(task) # 计算MSE对比性能 mse_ranger = pred_ranger$score(msr("regr.mse"))[[1]] mse_xgboost = pred_xgboost$score(msr("regr.mse"))[[1]] mse_ensemble = pred_ensemble$score(msr("regr.mse"))[[1]] # 输出结果 cat(sprintf("Ranger MSE: %.4f\nXGBoost MSE: %.4f\nEnsemble MSE: %.4f\n", mse_ranger, mse_xgboost, mse_ensemble))
二、单个模型作为AutoTuner集成到Pipeline
完全可以给单个模型单独创建AutoTuner,再将这些带调参的模型集成到Pipeline中,具体实现如下:
步骤1:为单个模型创建AutoTuner
分别给ranger和xgboost定义调参空间并创建AutoTuner:
# Ranger的调参空间和AutoTuner ranger_tune_space = ps( max.depth = p_fct(levels = c(2L, 3L)) ) at_ranger = auto_tuner( tuner = tnr("grid_search"), learner = lrn("regr.ranger", id = "tuned_ranger"), resampling = rsmp("holdout"), measure = msr("regr.mse"), search_space = ranger_tune_space, term_evals = 2, store_models = TRUE ) # XGBoost的调参空间和AutoTuner xgboost_tune_space = ps( max_depth = p_int(lower = 1L, upper = 3L), eta = p_dbl(lower = 0.1, upper = 0.3) ) at_xgboost = auto_tuner( tuner = tnr("grid_search"), learner = lrn("regr.xgboost", id = "tuned_xgboost"), resampling = rsmp("holdout"), measure = msr("regr.mse"), search_space = xgboost_tune_space, term_evals = 2, store_models = TRUE )
步骤2:将AutoTuner集成到Pipeline
把两个带调参的模型用gunion组合,再接入回归平均节点:
# 创建包含AutoTuner的Pipeline tuned_graph = gunion(list( tuned_ranger = at_ranger, tuned_xgboost = at_xgboost )) %>% po("regravg", innum = 2) # 转换为学习器并训练 tuned_graph_learner = as_learner(tuned_graph) tuned_graph_learner$train(task) # 生成集成模型预测 pred_tuned_ensemble = tuned_graph_learner$predict(task) cat(sprintf("Tuned Ensemble MSE: %.4f\n", pred_tuned_ensemble$score(msr("regr.mse"))[[1]]))
说明
- 每个
AutoTuner会独立完成自身模型的超参数调优,再将调优后的模型输出给后续的集成节点。 - 如果需要查看单个调优模型的结果,可以通过
trained_graph$pipeops$tuned_ranger$learner访问训练后的AutoTuner实例,再进一步获取最优模型。
内容的提问来源于stack exchange,提问作者Mislav Sagovac
相关产品推荐
相关产品推荐

