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:FALSEper non stampare messaggi.
Questo esercizio fa parte del corso
Supervised Learning in R: Regression
Istruzioni dell'esercizio
- Completa gli spazi per eseguire
xgb.cv()sui dati di training trattati; assegna l’output alla variabilecv.- 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_roundsa 5. - Imposta
etaa 0.75,max_deptha 5.
- Usa
- Estrai il data frame
evaluation_logdacve assegnalo alla variabileelog. Ogni riga dievaluation_logcorrisponde 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_meanetest_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)