#r #split #cross-validation #r-caret #sampling
#r #разделение #перекрестная проверка #r-каретка #выборка
Вопрос:
Мне нужно разделить данные в процессе перекрестной проверки, структурированной последовательно, например:
сложите-1 с наблюдениями с индексом от 1 до 10, сложите-2 с наблюдениями с индексом от 11 до 20 и так далее…
Выполняет trainControl()
ли какой-либо из методов caret
это последовательно? Я полагаю, что метод «cv» разделяет данные таким образом, но в документации каретки нет ничего ясного, чтобы гарантировать это.
Ответ №1:
Вы можете указать сгибы, используя indexOut=
аргумент. ознакомьтесь со страницей справки. Ниже я использую iris в качестве примера, я не могу запустить его последовательно, потому что данные упорядочены по видам, поэтому я сначала произвел рандомизацию:
library(caret)
dat = iris[sample(nrow(iris)),]
Я создаю сгибы, приведенные ниже, на основе 10-кратной перекрестной проверки, поэтому каждый сгиб занимает 1/10 от общего количества строк:
idx = (1:nrow(dat) - 1) %/% (nrow(dat) / 10)
Folds = split(1:nrow(dat),idx)
Мы можем посмотреть на присвоение индексов:
Folds[[1]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Folds[[2]]
[1] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Тогда беги train()
с этим:
model = train(Species ~.,method="rf",data=dat,
trControl=trainControl(method="cv",indexOut=Folds))
model
Random Forest
150 samples
4 predictor
3 classes: 'setosa', 'versicolor', 'virginica'
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 135, 135, 135, 135, 135, 135, ...
Resampling results across tuning parameters:
mtry Accuracy Kappa
2 1.0000000 1.0000000
3 1.0000000 1.0000000
4 0.9933333 0.9895833
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mtry = 2.