Lauren's answer, использовать сетки, является лучшим здесь. Я просто быстро укажу, что написанное вами - это подход, который можно использовать, и тот, на который вы можете вернуться, когда сетки не делают то, что вам нужно.
Ваш пример не содержит никаких данных (см. https://stackoverflow.com/help/mcve), поэтому я не смог его запустить, но я исправил пару проблем синтаксиса, которые я заметил (цикл for-in R напрямую дает вам значение, а не индекс, и круглые скобки вокруг 2-й цикл):
ntrees <- c(100,200,300,400)
learn_rate <- c(1,0.5,0.1)
for (n in ntrees){
for (l in learn_rate){
gbm_model <- h2o.gbm(
features, label, training_frame = train, validation_frame = valid,
ntrees = n,max_depth = 5,learn_rate = l
)
print(c(n,l,h2o.mse(h2o.performance(gbm_model, valid = TRUE))))
}
}
пример, когда вы будете использовать вложенные циклы, как это, когда вы хотите, чтобы пропустить определенные комбинации. Например. Вы можете решить только тесты ntrees из 100 с частотой обучения 0,1, которая будет выглядеть следующим образом:
ntrees <- c(100,200,300,400)
learn_rate <- c(1,0.5,0.1)
for (n in ntrees){
for (l in learn_rate){
if(l == 0.1 && n > 100)next #Skip when n is 200,300,400
gbm_model <- h2o.gbm(
features, label, training_frame = train, validation_frame = valid,
ntrees = n,max_depth = 5,learn_rate = l
)
print(c(n,l,h2o.mse(h2o.performance(gbm_model, valid = TRUE))))
}
}