IniziaInizia gratis

Trova il numero giusto di alberi per un gradient boosting machine

In questo esercizio ti preparerai a costruire un modello di gradient boosting per prevedere il numero di biciclette noleggiate in un’ora in funzione del meteo, del tipo e dell’orario della giornata. Allenerai il modello sui dati del mese di luglio.

I dati di luglio sono già stati caricati. Ricorda che bikesJuly.treat non contiene più la colonna dell’output, quindi devi prenderla dai dati non trattati: bikesJuly$cnt.

Userai il pacchetto xgboost per adattare il modello di random forest. La funzione xgb.cv() (docs) usa la cross-validation per stimare l’errore di apprendimento out-of-sample man mano che ogni nuovo albero viene aggiunto al modello. Il numero appropriato di alberi da usare nel modello finale è quello che minimizza la RMSE sul holdout.

Per questo esercizio, gli argomenti chiave della chiamata a xgb.cv() sono:

  • data: una matrice numerica.
  • label: un vettore di output (anch’esso numerico).
  • nrounds: il numero massimo di round (alberi da costruire).
  • nfold: il numero di fold per la cross-validation. 5 è un buon valore.
  • objective: "reg:squarederror" per output continui.
  • eta: il learning rate.
  • max_depth: profondità massima degli alberi.
  • early_stopping_rounds: dopo questo numero di round senza miglioramenti, interrompi.
  • verbose: FALSE per non stampare messaggi.

Questo esercizio fa parte del corso

Supervised Learning in R: Regression

Visualizza il corso

Istruzioni dell'esercizio

  • Completa gli spazi per eseguire xgb.cv() sui dati di training trattati; assegna l’output alla variabile cv.
    • Usa as.matrix() per convertire il data frame trattato in una matrice.
    • Usa 50 round e una cross-validation a 5 fold.
    • Imposta early_stopping_rounds a 5.
    • Imposta eta a 0.75, max_depth a 5.
  • Estrai il data frame evaluation_log da cv e assegnalo alla variabile elog. Ogni riga di evaluation_log corrisponde a un albero aggiuntivo, quindi il numero di riga indica il numero di alberi nel modello.
  • Completa gli spazi per ottenere il numero di alberi con il valore minimo delle colonne train_rmse_mean e test_rmse_mean.
    • which.min() (docs) restituisce l’indice del valore minimo in un vettore.
    • Di quanti alberi hai bisogno?

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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)
Modifica ed esegui il codice