是否有一个 trainControl 方法,例如90% 和 10% 拆分而不是 cv?

Is there a trainControl method of just a e.g. 90% and 10% split rather than cv?

我正在阅读插入符号文档 here

我过去曾使用方法 cv 进行交叉验证,但在这种情况下,我想使用简单的拆分,即 90% 的训练和 10% 的保留用于测试。

我想我可以做 folds = 1 但想知道插入符号内是否有规定的方法?

在文档中,可用于 trainControl() 方法的参数如下:

The resampling method: boot, boot632, cv, repeatedcv, LOOCV, LGOCV (for repeated training/test splits), none (only fits one model to the entire training set), oob (only for random forest, bagged trees, bagged earth, bagged flexible discriminant analysis, or conditional tree forest models), "adaptive_cv", "adaptive_boot" or "adaptive_LGOCV"

但我不确定这些是什么意思。也许其中之一就是我需要的?

一个解决方案是在 caret 之外创建 train/test 拆分并使用 trainControlindex 参数使 caret 使用这些数据分区.

这需要一个列车索引向量列表。 使用 caret::createDataPartition() 函数可以轻松创建这样的对象。

library(caret)
library(MASS)

set.seed(1234)

# create four 50/50 partitions
parts <- createDataPartition(Boston$medv, times = 4, p = 0.5)

ctrl <- trainControl(method = "repeatedcv", 
                     ## The method doesn't matter
                     ## since we are defining the resamples
                     index= parts, 
                     savePredictions = TRUE
                     ) 
res <- train(medv ~ indus + chas, data = Boston, method = "lm",
             trControl = ctrl)

res

请注意,createDataPartition 创建了在结果变量上分层的拆分。 我最终创建了自己的数据分区函数来创建真正随机的分区。这是出于教学目的。我的印象是,在实践中,对结果进行分层抽样实际上总是比随机抽样更可取。