Есть две вещи, которые вы можете сделать, но они могут не полностью удовлетворить ваши потребности.
Исправить повторную выборку для данного задания
... или хотя бы данный номер. В этом примере мы используем задачу iris.task
.
inner_fixed = makeResampleInstance(inner, iris.task)
tune_lrn1 <- makeTuneWrapper(lrn1, resampling = inner_fixed, par.set = ps, control = ctrl)
tune_lrn2 <- makeTuneWrapper(lrn2, resampling = inner_fixed, par.set = ps, control = ctrl)
Если вы хотите применить это для нескольких задач, вы должны решить это программно.
Установка семян может быть неудачной!
Следующая настройка уже используется по умолчанию
ctrl = makeTuneControl*(same.resampling.instance = TRUE, ...)
Это означает, что все оценки настройки оцениваются в одном и том же разделении поезда / теста Другими словами: makeResampleInstance
вызывается в самом начале tune()
. Теперь мы можем перейти к ответу @ pat-s, который не всегда работает, потому что RNG используется во время обучения для некоторых учеников, и, соответственно, текущий разделение поезда / теста будет «расходиться»:
library(mlr)
inner = makeResampleDesc("CV", iters = 3L)
task = iris.task
lrn1 = makeLearner("classif.rpart")
lrn2 = makeLearner("classif.svm")
ctrl = makeTuneControlRandom(same.resampling.instance = TRUE, budget = 4)
library(mlrHyperopt)
ps1 = getDefaultParConfig(lrn1)$par.set
ps2 = getDefaultParConfig(lrn2)$par.set
tune_lrn1 = makeTuneWrapper(lrn1, resampling = inner, par.set = ps1, control = ctrl)
tune_lrn2 = makeTuneWrapper(lrn2, resampling = inner, par.set = ps2, control = ctrl)
set.seed(1)
r1 = resample(tune_lrn1, resampling = cv10, task = iris.task, models = TRUE)
set.seed(1)
r2 = resample(tune_lrn2, resampling = cv10, task = iris.task, models = TRUE)
sapply(1:10, function(i) {
identical(r2$models[[i]]$learner.model$opt.result$resampling$train.inds, r1$models[[i]]$learner.model$opt.result$resampling$train.inds)
})
# [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE