Сгибы CV не создаются при определении trainControl
, если это явно не указано с помощью аргумента index
, который я рекомендую.Они могут быть созданы с использованием одной из специализированных caret
функций:
createFolds
createMultiFolds
createTimeSlices
groupKFold
При этомиспользование определенного начального числа до определения trainControl
не приведет к одинаковым сгибам CV.
Пример:
library(caret)
library(tidyverse)
set.seed(1)
trControl = trainControl(method = "cv",
returnResamp = "final",
savePredictions = "final")
создайте две модели:
knnFit1 <- train(iris[,1:4], iris[,5],
method = "knn",
preProcess = c("center", "scale"),
tuneLength = 10,
trControl = trControl)
ldaFit2 <- train(iris[,1:4], iris[,5],
method = "lda",
tuneLength = 10,
trControl = trControl)
проверьте, находятся ли одинаковые индексы в одинаковых сгибах:
knnFit1$pred %>%
left_join(ldaFit2$pred, by = "rowIndex") %>%
mutate(same = Resample.x == Resample.y) %>%
{all(.$same)}
#FALSE
Если вы устанавливаете одинаковое начальное число перед каждым train
вызовом
set.seed(1)
knnFit1 <- train(iris[,1:4], iris[,5],
method = "knn",
preProcess = c("center", "scale"),
tuneLength = 10,
trControl = trControl)
set.seed(1)
ldaFit2 <- train(iris[,1:4], iris[,5],
method = "lda",
tuneLength = 10,
trControl = trControl)
set.seed(1)
rangerFit3 <- train(iris[,1:4], iris[,5],
method = "ranger",
tuneLength = 10,
trControl = trControl)
knnFit1$pred %>%
left_join(ldaFit2$pred, by = "rowIndex") %>%
mutate(same = Resample.x == Resample.y) %>%
{all(.$same)}
knnFit1$pred %>%
left_join(rangerFit3$pred, by = "rowIndex") %>%
mutate(same = Resample.x == Resample.y) %>%
{all(.$same)}
, в сгибах будут использоваться одни и те же индексы,Однако я бы не стал полагаться на этот метод при использовании параллельных вычислений.Поэтому, чтобы обеспечить использование одних и тех же разбиений данных, лучше всего определить их вручную, используя index
/ indexOut
аргументы в trainControl
.
Когда вы установите аргумент индекса вручную, складки будутто же самое, однако это не гарантирует, что модели, сделанные одним и тем же методом, будут одинаковыми, так как большинство методов включают в себя некоторый случайный процесс.Таким образом, чтобы быть полностью воспроизводимым, желательно также устанавливать семена перед каждым вызовом поезда.При параллельном запуске для получения полностью воспроизводимых моделей необходимо установить аргумент seeds
в trainControl
.