ComeçarComece de graça

Encontre o número certo de árvores para um gradient boosting machine

Neste exercício, você vai se preparar para construir um modelo de gradient boosting para prever o número de bicicletas alugadas por hora em função do clima e do tipo e horário do dia. Você vai treinar o modelo com dados do mês de julho.

Os dados de julho já foram carregados. Lembre-se de que bikesJuly.treat não tem mais a coluna de desfecho, então você precisa obtê-la dos dados não tratados: bikesJuly$cnt.

Você usará o pacote xgboost para ajustar o modelo de random forest. A função xgb.cv() (docs) usa validação cruzada para estimar o erro de aprendizado fora da amostra à medida que cada nova árvore é adicionada ao modelo. O número adequado de árvores a usar no modelo final é aquele que minimiza o RMSE do conjunto de validação.

Para este exercício, os principais argumentos da chamada xgb.cv() são:

  • data: uma matriz numérica.
  • label: vetor de desfechos (também numérico).
  • nrounds: o número máximo de rodadas (árvores a construir).
  • nfold: o número de folds para a validação cruzada. 5 é um bom número.
  • objective: "reg:squarederror" para desfechos contínuos.
  • eta: a taxa de aprendizado.
  • max_depth: profundidade máxima das árvores.
  • early_stopping_rounds: após esse número de rodadas sem melhoria, parar.
  • verbose: FALSE para ficar em silêncio.

Este exercício faz parte do curso

Aprendizado Supervisionado em R: Regressão

Ver curso

Instruções do exercício

  • Preencha os espaços para executar xgb.cv() nos dados de treino tratados; atribua a saída à variável cv.
    • Use as.matrix() para converter o data frame tratado em matriz.
    • Use 50 rodadas e validação cruzada com 5 folds.
    • Defina early_stopping_rounds como 5.
    • Defina eta como 0.75 e max_depth como 5.
  • Obtenha o data frame evaluation_log a partir de cv e atribua-o à variável elog. Cada linha de evaluation_log corresponde a uma nova árvore, então o número da linha indica o número de árvores no modelo.
  • Preencha os espaços para obter o número de árvores com o valor mínimo das colunas train_rmse_mean e test_rmse_mean.
    • which.min() (docs) retorna o índice do valor mínimo em um vetor.
    • Quantas árvores você precisa?

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# Run xgb.cv
cv <- xgb.cv(data = ____, 
            label = ___,
            nrounds = ___,
            nfold = ___,
            objective = "reg:squarederror",
            eta = ___,
            max_depth = ___,
            early_stopping_rounds = ___,
            verbose = FALSE   # silent
)

# Get the evaluation log 
elog <- ___

# Determine and print how many trees minimize training and test error
elog %>% 
   summarize(ntrees.train = ___,   # find the index of min(train_rmse_mean)
             ntrees.test  = ___)   # find the index of min(test_rmse_mean)
Editar e executar o código