Busca em grade e aleatória com H2O

Ajuste de hiperparâmetros em R

Dr. Shirin Elsinghorst

Senior Data Scientist

Hiperparâmetros em modelos H2O

  • Hiperparâmetros para Gradient Boosting:
?h2o.gbm
  • ntrees: Número de árvores. Padrão: 50.

  • max_depth: Profundidade máxima. Padrão: 5.

  • min_rows: Mínimo de observações (ponderadas) em uma folha. Padrão: 10.

  • learn_rate: Taxa de aprendizado (0.0 a 1.0). Padrão: 0,1.

  • learn_rate_annealing: Escala a taxa após cada árvore (ex.: 0,99 ou 0,999). Padrão: 1.
Ajuste de hiperparâmetros em R

Preparando os dados para modelagem no H2O

  • Converter para H2O Frame
seeds_data_hf <- as.h2o(seeds_data)
  • Definir features e alvo
y <- "seed_type"
x <- setdiff(colnames(seeds_data_hf), y)
  • Dividir em treino, validação e teste
sframe <- h2o.splitFrame(data = seeds_data_hf, ratios = c(0.7, 0.15), seed = 42)
train <- sframe[[1]]
valid <- sframe[[2]]
test <- sframe[[3]]
Ajuste de hiperparâmetros em R

Definindo uma grade de hiperparâmetros

  • Hiperparâmetros do GBM
gbm_params <- list(ntrees = c(100, 150, 200), max_depth = c(3, 5, 7), learn_rate = c(0.001, 0.01, 0.1))
  • Função h2o.grid
gbm_grid <- h2o.grid("gbm", 
                     grid_id = "gbm_grid",
                     x = x, 
                     y = y,
                     training_frame = train,
                     validation_frame = valid,
                     seed = 42,
                     hyper_params = gbm_params)
  • Ver os resultados com h2o.getGrid
Ajuste de hiperparâmetros em R

Examinando um objeto de grade

  • Ver resultados do gbm_grid com h2o.getGrid.

  • Obter a grade ordenada por acurácia de validação

gbm_gridperf <- h2o.getGrid(grid_id = "gbm_grid", sort_by = "accuracy", decreasing = TRUE)
ID da grade: gbm_grid 
Hiperparâmetros usados: 
  -  learn_rate 
  -  max_depth 
  -  ntrees 
Número de modelos: 27 
Modelos com falha: 0 

Resumo da busca de hiperparâmetros: em ordem decrescente de acurácia
Ajuste de hiperparâmetros em R

Extraindo o melhor modelo de uma grade

  • O melhor GBM por acurácia de validação está na posição 1
best_gbm <- h2o.getModel(gbm_gridperf@model_ids[[1]])
  • Estes são os hiperparâmetros do melhor modelo:
print(best_gbm@model[["model_summary"]])
Resumo do modelo: 
 number_of_trees number_of_internal_trees model_size_in_bytes min_depth
             200                      600              100961         2 
 max_depth mean_depth min_leaves max_leaves mean_leaves
         7    5.22667          3         10     8.38833
Ajuste de hiperparâmetros em R

Extraindo o melhor modelo de uma grade

  • best_gbm é um objeto H2O model comum e pode ser usado como tal!
h2o.performance(best_gbm, test)
MSE: (Extraia com `h2o.mse`) 0.04761904
RMSE: (Extraia com `h2o.rmse`) 0.2182179
Logloss: (Extraia com `h2o.loglos
Ajuste de hiperparâmetros em R

Busca aleatória com H2O

  • Além da grade de hiperparâmetros, adicione critérios de busca:
gbm_params <- list(ntrees = c(100, 150, 200),
                   max_depth = c(3, 5, 7),
                   learn_rate = c(0.001, 0.01, 0.1))

search_criteria <- list(strategy = "RandomDiscrete", max_runtime_secs = 60, seed = 42)
gbm_grid <- h2o.grid("gbm", grid_id = "gbm_grid", x = x, y = y, training_frame = train, validation_frame = valid, seed = 42, hyper_params = gbm_params, search_criteria = search_criteria)
Ajuste de hiperparâmetros em R
search_criteria <- list(strategy = "RandomDiscrete", 
                        stopping_metric = "mean_per_class_error", 
                        stopping_tolerance = 0.0001, 
                        stopping_rounds = 6)

gbm_grid <- h2o.grid("gbm", x = x, y = y, training_frame = train, validation_frame = valid, seed = 42, hyper_params = gbm_params, search_criteria = search_criteria)
Detalhes do H2O Grid
====================
ID da grade: gbm_grid 
Hiperparâmetros usados: 
  -  learn_rate 
  -  max_depth 
  -  ntrees 
Número de modelos: 30 
Modelos com falha: 0
Ajuste de hiperparâmetros em R

Vamos praticar!

Ajuste de hiperparâmetros em R

Preparing Video For Download...