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

如何在caret中保留验证集用于超参数调优而非交叉验证?

使用caret的预指定验证集进行超参数调优

要在caret中使用预指定的固定验证集做超参数调优(而非交叉验证),可以通过trainControl的method="LGOCV"(留组交叉验证)配合索引参数实现,具体步骤如下:

步骤1:划分时序数据集(保持顺序)

时间序列数据必须严格按时间顺序划分,确保验证集在训练集之后,测试集在验证集之后,示例代码:

# 假设原始时序数据集为ts_data,按时间比例划分
train_ratio <- 0.7
val_ratio <- 0.2

train_end <- floor(nrow(ts_data) * train_ratio)
val_end <- train_end + floor(nrow(ts_data) * val_ratio)

train_data <- ts_data[1:train_end, ]
val_data <- ts_data[(train_end+1):val_end, ]
test_data <- ts_data[(val_end+1):nrow(ts_data), ]

步骤2:配置trainControl

用index指定训练集索引,indexOut指定验证集索引,配合method="LGOCV"实现固定验证集调优:

# 生成训练集和验证集的全局索引(基于合并后的数据集)
train_idx <- seq(nrow(train_data))
val_idx <- seq(nrow(train_data)+1, nrow(train_data)+nrow(val_data))

# 转为列表格式(trainControl要求index参数为列表)
train_index <- list(train_idx)
val_index <- list(val_idx)

# 配置训练控制参数
ctrl <- trainControl(
  method = "LGOCV",
  index = train_index,
  indexOut = val_index,
  savePredictions = TRUE,  # 可选,保存验证集预测结果用于分析
  verboseIter = FALSE
)

步骤3:用train函数拟合模型

将训练集和验证集合并传入train,指定trControl=ctrl即可:

# 示例:用线性回归模型(替换为你需要的模型,比如"rf"随机森林等)
fit <- train(
  y ~ .,  # 替换为你的因变量和自变量公式
  data = rbind(train_data, val_data),
  method = "lm",
  trControl = ctrl,
  # 若模型有超参数,用tuneGrid指定调优范围,例如lasso的lambda:
  # tuneGrid = expand.grid(lambda = seq(0.01, 0.5, by = 0.01))
)

关键注意事项

  • 时序数据禁止随机划分索引,必须保证样本的时间先后顺序,避免数据泄露
  • 调优完成后,仅用独立测试集评估模型最终泛化能力,不要用验证集结果作为最终性能指标
  • 若无需超参数调优,可省略tuneGrid,或指定单一参数组合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:27:07