caret包createFolds函数K折数据集拆分是随机抽样还是分层均匀抽样?
caret包createFolds函数K折拆分规则说明
核心拆分逻辑
createFolds的核心输入为响应变量y和折数k,拆分流程如下:
- 函数首先对响应变量做分组处理:分类任务下按
y的类别分组,回归任务下按y的分位数切分为大小相近的组 - 从每个分组中均匀抽取样本分配到不同的折,最终返回每个折对应的样本索引
- 默认配置下返回长度为
k的列表,每个列表元素存储当前折测试集的样本行号,你可以通过参数调整返回内容:- 设
returnTrain = TRUE会返回每个折的训练集行号 - 设
list = FALSE会返回向量格式的分组标记,每个值对应样本属于第几个折的测试集
- 设
示例用法:
library(caret) # 基于鸢尾花数据集的类别列做5折拆分 folds <- createFolds(y = iris$Species, k = 5) # 取第一折的训练集和测试集 train_data <- iris[-folds[[1]], ] test_data <- iris[folds[[1]], ]
抽样类型说明
createFolds默认采用分层抽样逻辑,而非普通随机抽样:
- 分类场景下会严格保证每个折中各类样本的占比和原数据集完全一致,避免出现某一折缺少某类样本、或某类样本占比极端的情况
- 回归场景下会保证每个折的响应变量分布和原数据集接近,避免某一折全是极值样本
- 如果需要使用普通随机抽样,只需给
y传入所有值都相同的向量即可,此时分层逻辑自动失效,退化为纯随机拆分
内容的提问来源于stack exchange,提问作者TUSTLGC
相关产品推荐
相关产品推荐

