我正在尝试找到条件随机森林的最佳 mtry 值。我在 caret::train 函数的帮助下做到了这一点,发现根据网格范围,即使使用相同的种子,我也会得到不同的最佳 mtry。那我该选择哪个值呢? 示例:
set.seed(12)
data<-mtcars%>%
mutate(target=as.factor(vs))
grid <- expand.grid(.mtry=2:12)
mod <- train(target ~ ., data = data, method = "cforest", controls = cforest_unbiased(ntree = 500), tuneGrid=grid)
mod$bestTune
set.seed(12)
data<-mtcars%>%
mutate(target=as.factor(vs))
grid <- expand.grid(.mtry=1:12)
mod <- train(target ~ ., data = data, method = "cforest", controls = cforest_unbiased(ntree = 500), tuneGrid=grid)
mod$bestTune
如果网格不同,那么即使对于相同的种子,结果通常也会不同。然而,这取决于
train()
函数如何通过网格。可能,如果您只是更改网格的末尾(而不是开头),那么到该点的结果将是相同的。
如果您想拆分计算,那么您可以在对每个网格进行训练之前使用单独的网格并设置单独的种子。然后您可以轻松添加或删除零件。但是,当然,您必须在不同的网格上手动选择最佳结果。
无论如何,获得mtry = 8
与
mtry = 9
似乎并没有太大区别。如果这在随机变化的范围内,我不会感到惊讶。但我无法复制你的结果,因为我刚刚收到训练警告(可能是因为
vs
与
target
相同,但用作回归量之一)。