Как каретка разделяет данные в trainControl?

#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.