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

mlr3嵌套CV基准测试中外环样本预测等结果提取技术问询

mlr3嵌套CV提取关键结果的解决方案

核心问题分析

你遇到的outer_learners返回NULL,是因为默认基准测试配置不会保存外环训练好的模型,需要显式开启模型存储;同时筛选最优内环模型需要结合内环验证结果来选择。

步骤1:调整基准测试配置,开启模型存储

在创建基准测试时,必须设置store_models = TRUE,才能保留外环训练模型及内环的相关结果。

示例代码调整:

library(mlr3)
library(mlr3proba)
library(mlr3learners)
library(mlr3benchmark)

# 加载并预处理lung数据集
task = tsk("lung")
task$set_col_roles("inst", "ignore")

# 定义生存学习器(以Cox模型为例)
learner = lrn("surv.coxph")

# 定义嵌套CV结构:外环5折,内环3折
inner_resampling = rsmp("cv", folds = 3)
outer_resampling = rsmp("cv", folds = 5)

# 构建基准测试设计
design = benchmark_grid(
  tasks = task,
  learners = learner,
  resamplings = outer_resampling
)

# 运行基准测试,开启模型存储
bmr = benchmark(design, store_models = TRUE)

步骤2:提取外环样本的分布预测与linear predictors

通过bmr$score()获取所有外环折的结果,从PredictionSurv对象中提取所需信息:

# 获取外环所有折的评分结果
scores = bmr$score()

# 遍历每个外环折提取预测数据
for (i in seq_len(nrow(scores))) {
  pred = scores$prediction[[i]]
  
  # 提取linear predictors(Cox模型的线性预测值)
  lp_values = pred$lp
  
  # 提取特定时间点的事件概率(以时间点100为例)
  surv_prob = pred$distr$survival(100)
  event_prob = 1 - surv_prob
  
  # 可将结果存入数据框或进行后续处理
  # ...
}

步骤3:提取内环训练的baseline hazard并筛选最优模型

内环的模型和验证结果需从外环模型的嵌套resampling属性中获取:

# 遍历每个外环折的训练模型
for (i in seq_len(nrow(scores))) {
  outer_learner = scores$learner[[i]]
  
  # 获取内环交叉验证的结果
  inner_res_results = outer_learner$model$resampling$result
  
  # 筛选最优内环模型:比如选择验证集C-index最高的模型
  best_inner_idx = which.max(inner_res_results$surv.cindex)
  best_inner_learner = outer_learner$model$learners[[best_inner_idx]]
  
  # 提取baseline hazard(Cox模型的基线风险)
  baseline_hazard = best_inner_learner$model$basehaz
  print(baseline_hazard)
}

关键注意事项

  • 确认使用的学习器支持返回lp和distr属性,surv.coxph等标准生存学习器均支持,其他学习器需提前验证。
  • 若同时测试多个学习器,可在benchmark_grid中添加多个学习器,后续通过learner_id字段区分结果。
  • store_models = TRUE会增加内存占用,处理大数据集时需注意内存限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:21:01