1

我在这里阅读插入符号文档。

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

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

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

重采样方法:boot、boot632、cv、repeatcv、LOOCV、LGOCV(用于重复训练/测试拆分)、none(仅适合整个训练集的一个模型)、oob(仅适用于随机森林、袋装树、袋装地球、袋装灵活判别分析或条件树森林模型)、“adaptive_cv”、“adaptive_boot”或“adaptive_LGOCV”

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

4

1 回答 1

1

一种解决方案是在外部创建训练/测试拆分caret并使用index参数trainControlcaret使用这些数据分区。

这需要一个火车索引向量列表。使用该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会创建按结果变量分层的拆分。我最终创建了自己的数据分区函数来创建真正的随机分区。这是出于教学目的。我的印象是,对结果进行分层抽样实际上总是比随机抽样更可取。

于 2019-03-19T09:49:01.633 回答