2016-10-12 4 views
2

Мне нужно выполнить оптимизацию параметров в модели gbm на RH2o. Я относительно новичок в H2o, и мне кажется, мне нужно преобразовать ntrees и learn_rate (ниже) в вектор H2o, прежде чем выполнять ниже. Как выполнить эту операцию? Спасибо!Оптимизация параметров в R и H2O

ntrees <- c(100,200,300,400) 
learn_rate <- c(1,0.5,0.1) 
for (i in ntrees){ 
    for j in learn_rate{ 
    n = ntrees[i] 
    l= learn_rate[j] 
    gbm_model <- h2o.gbm(features, label, training_frame = train, validation_frame = valid, ntrees=ntrees[[i]],max_depth = 5,learn_rate=learn_rate[j]) 
    print(c(ntrees[i],learn_rate[j],h2o.mse(h2o.performance(gbm_model, valid = TRUE)))) 

    } 
} 

ответ

2

вы можете использовать h2o.grid() сделать ваш поиск сетки

# specify your hyper parameters 
hyper_params = list(ntrees = c(100,200,300,400), learn_rate = c(1,0.5,0.1)) 

# then build your grid 
grid <- h2o.grid(
## hyper parameters 
hyper_params = hyper_params, 

## which algorithm to run 
algorithm = "gbm", 

## identifier for the grid, to later retrieve it 
grid_id = "my_grid", 

## standard model parameters 
x = features, 
y = label, 
training_frame = train, 
validation_frame = valid, 

## set a seed for reproducibility 
seed = 1234) 

вы можете прочитать больше о том, как h2o.grid() работает в R документации http://docs.h2o.ai/h2o/latest-stable/h2o-r/h2o_package.pdf

0

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)))) 
    } 
}