CARET. Связь между разделением данных и trainControl

Я внимательно прочитал документацию CARET: http://caret.r-forge.r-project.org/training.html, виньетки, и все совершенно ясно (примеры на сайте очень помогают!), но я все еще путаюсь в отношении отношения между двумя аргументами к trainControl:

method 
index

и взаимодействие между trainControl и функциями разделения данных в карете (например, createDataPartition, createResample, createFolds и createMultiFolds)

Чтобы лучше сформулировать мои вопросы, позвольте мне использовать следующий пример из документации:

data(BloodBrain)
set.seed(1)
tmp <- createDataPartition(logBBB,p = .8, times = 100)
trControl = trainControl(method = "LGOCV", index = tmp)
ctreeFit <- train(bbbDescr, logBBB, "ctree",trControl=trControl)

Мои вопросы:

  • Если я использую createDataPartition (который я предполагаю, что делает стратифицированную загрузку), как в приведенном выше примере, и я передаю результат как index to trainControl, мне нужно использовать LGOCV как метод в моем вызове trainControl? Если я использую другой (например, cv), какая разница? В моей голове, как только вы исправите index, вы по сути выбираете тип перекрестной проверки, поэтому я не уверен, какую роль играет method, если вы используете index.

  • В чем разница между createDataPartition и createResample? Разве что createDataPartition делает стратифицированную загрузку, а createResample не работает?

3) Как я могу сделать стратифицированный k-кратный (например, 10-кратный) перекрестный контроль с помощью каретки? Будет ли это делать?

tmp <- createFolds(logBBB, k=10, list=TRUE,  times = 100)
trControl = trainControl(method = "cv", index = tmp)
ctreeFit <- train(bbbDescr, logBBB, "ctree",trControl=trControl)

Ответ 1

Если вы не знаете, какой метод роли играет, если вы используете индекс, почему бы не применять все методы и сравнивать результаты. Это слепой метод comparaison, но он может дать вам некоторые интуиции.

  methods <- c('boot', 'boot632', 'cv', 
               'repeatedcv', 'LOOCV', 'LGOCV')

Я создаю свой индекс:

  n <- 100
  tmp <- createDataPartition(logBBB,p = .8, times = n)

Я применяю trainControl для моего списка методов, и я удаляю индекс из результата, поскольку он является общим для всех моих методов.

ll <- lapply(methods,function(x)
         trControl = trainControl(method = x, index = tmp))
ll <- sapply(ll,'[<-','index', NULL)

Следовательно, my ll:

                 [,1]      [,2]      [,3]      [,4]         [,5]      [,6]     
method            "boot"    "boot632" "cv"      "repeatedcv" "LOOCV"   "LGOCV"  
number            25        25        10        10           25        25       
repeats           25        25        1         1            25        25       
verboseIter       FALSE     FALSE     FALSE     FALSE        FALSE     FALSE    
returnData        TRUE      TRUE      TRUE      TRUE         TRUE      TRUE     
returnResamp      "final"   "final"   "final"   "final"      "final"   "final"  
savePredictions   FALSE     FALSE     FALSE     FALSE        FALSE     FALSE    
p                 0.75      0.75      0.75      0.75         0.75      0.75     
classProbs        FALSE     FALSE     FALSE     FALSE        FALSE     FALSE    
summaryFunction   ?         ?         ?         ?            ?         ?        
selectionFunction "best"    "best"    "best"    "best"       "best"    "best"   
preProcOptions    List,3    List,3    List,3    List,3       List,3    List,3   
custom            NULL      NULL      NULL      NULL         NULL      NULL     
timingSamps       0         0         0         0            0         0        
predictionBounds  Logical,2 Logical,2 Logical,2 Logical,2    Logical,2 Logical,2