我最近一直在研究 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
?或两者?
希望这是有道理的,而不是完全的垃圾。任何帮助
我正在查询的代码项目可以在这里找到。它可能更容易阅读,你会明白的。