Как сделать перекрестную проверку с помощью createFolds () и индексного аргумента trainControl ()? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу сделать несколько моделей машинного обучения и сравнить результаты, чтобы выбрать лучшую модель.

По данным DataCamp, для справедливого сравнения нескольких моделей модели должны использовать одинаковые разделительные тренировки / тестовые разбиения при сгибании. Таким образом, вместо того, чтобы просто использовать следующий код, рекомендуется использовать createFolds () для создания пользовательских индексов, которые будут использоваться при создании каждой модели.

trainControl(method="cv", number = 5, ...)

Чтобы сравнить процесс перекрестной проверки, я сначала попробовал код ниже.

> myGrid <- data.frame(mtry=2)
> 
> trc <- trainControl(method="cv", number = 5, verboseIter = TRUE)
> m <- train(cyl~., mtcars, trControl = trc, tuneGrid=myGrid)
+ Fold1: mtry=2 
- Fold1: mtry=2 
+ Fold2: mtry=2 
- Fold2: mtry=2 
+ Fold3: mtry=2 
- Fold3: mtry=2 
+ Fold4: mtry=2 
- Fold4: mtry=2 
+ Fold5: mtry=2 
- Fold5: mtry=2

> m
Random Forest 

32 samples
10 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 27, 25, 25, 25, 26 

Я попробовал ту же самую перекрестную проверку (k = 5) с пользовательскими сгибами, которые я сделал.

> myFolds <- createFolds(mtcars$cyl, k=5)
> trc_index <- trainControl(index=myFolds, verboseIter = TRUE)
> m_index <- train(cyl~., mtcars, trControl = trc_index, tuneGrid=myGrid)
+ Fold1: mtry=2 
- Fold1: mtry=2 
+ Fold2: mtry=2 
- Fold2: mtry=2 
+ Fold3: mtry=2 
- Fold3: mtry=2 
+ Fold4: mtry=2 
- Fold4: mtry=2 
+ Fold5: mtry=2 
- Fold5: mtry=2 

> m_index
Random Forest 

32 samples
10 predictors

No pre-processing
Resampling: Bootstrapped (5 reps) 
Summary of sample sizes: 6, 6, 6, 7, 7 

Большие различия заключаются в «повторной выборке» (перекрестная проверка и начальная загрузка) и «сводке размеров выборки» (27 против 6).

Я думаю, что напечатанный метод передискретизации может быть неправильным, потому что я не ввел явно метод передискретизации как 'cv'.

Но я думаю, что разные размеры выборки говорят мне, что я делаю это неправильно. Размер выборки для каждой итерации должен быть около 25.

Я использовал «indexOut» вместо «index», но он по-прежнему показывает небольшие размеры выборки.

Я не смог найти подходящего руководства по этой проблеме с поиском в Google.

Я думаю, что код, использованный в следующем URL-адресе, не отличается от того, который я использовал. https://lgatto.github.io/IntroMachineLearningWithR/supervised-learning.html#model-selection-1

Любая помощь будет оценена. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...