Недавно я углубился в пакет R caret
и у меня возник вопрос о воспроизводимости и сравнении моделей во время обучения, который я не смог точно определить.
Мое намерение состоит в том, чтобы каждый train
вызов и, следовательно, каждая результирующая модель использовали одни и те же разбиения перекрестной проверки, чтобы исходные сохраненные результаты перекрестной проверки были сопоставимы с вневыборочными оценками модели, которые вычисляются во время построения.
Один из методов, который я видел, заключается в том, что вы можете указывать семя перед каждым вызовом train
как таковым:
set.seed(1)
model <- train(..., trControl = trainControl(...))
set.seed(1)
model2 <- train(..., trControl = trainControl(...))
set.seed(1)
model3 <- train(..., trControl = trainControl(...))
Однако совместное использование объекта trainControl
между вызовами train
означает, что они используют одну и ту же передискретизацию и индексы в целом, или я должен явно передать аргумент seeds
в функцию. Имеет ли объект управления поездом случайные функции при его использовании или они задаются при объявлении?
Мой текущий метод был:
set.seed(1)
train_control <- trainControl(method="cv", ...)
model1 <- train(..., trControl = train_control)
model2 <- train(..., trControl = train_control)
model3 <- train(..., trControl = train_control)
Будут ли эти заходы поездов использовать те же разбиения и быть сопоставимыми, или мне нужно будет предпринять дальнейшие шаги для обеспечения этого? т.е. указание семян при создании объекта trainControl
или вызов set.seed
перед каждым поездом? Или оба?
Надеюсь, в этом есть смысл, а не полная чушь. Любая помощь
Мой проект кода, о котором я спрашиваю, можно найти здесь. Возможно, будет легче прочитать это, и вы поймете.