IniziaInizia gratis

glmnet con trainControl e tuning personalizzati

Come hai visto nel video, il modello glmnet in realtà adatta molti modelli in una volta sola (una delle grandi qualità del pacchetto). Puoi sfruttarlo passando un numero elevato di valori di lambda, che controllano l’ammontare della penalizzazione nel modello. train() è abbastanza intelligente da adattare un solo modello per ogni valore di alpha e passare tutti i valori di lambda in una volta per un fitting simultaneo.

La mia griglia di tuning preferita per i modelli glmnet è:

expand.grid(
  alpha = 0:1,
  lambda = seq(0.0001, 1, length = 100)
)

Questa griglia esplora un gran numero di valori di lambda (100, per la precisione), da molto piccolo a molto grande. (Potresti aumentare il lambda massimo a 10, ma in questo esercizio 1 è un buon limite superiore.)

Se vuoi esplorare meno modelli, puoi usare una sequenza di lambda più corta. Per esempio, lambda = seq(0.0001, 1, length = 10) adattarebbe 10 modelli per ciascun valore di alpha.

Con questo tuneGrid esamini anche le due forme di modelli penalizzati: ridge regression e lasso regression. alpha = 0 è ridge regression pura e alpha = 1 è lasso regression pura. Puoi adattare una combinazione dei due modelli (cioè un elastic net) usando un alpha compreso tra 0 e 1. Per esempio, alpha = 0.05 corrisponde al 95% di ridge regression e al 5% di lasso regression.

In questo esercizio esplorerai solo i due estremi – ridge puro e lasso puro – per metterne in evidenza le differenze.

Questo esercizio fa parte del corso

Machine Learning con caret in R

Visualizza il corso

Istruzioni dell'esercizio

  • Allena un modello glmnet sui dati overfit in cui y è la variabile risposta e tutte le altre variabili sono esplicative. Assicurati di usare il tuo trainControl personalizzato dall’esercizio precedente (myControl). Inoltre, usa un tuneGrid personalizzato per esplorare alpha = 0:1 e 20 valori di lambda tra 0.0001 e 1 per ciascun valore di alpha.
  • Stampa model nella console.
  • Stampa il max() della statistica ROC in model[["results"]]. Puoi accedervi con model[["results"]][["ROC"]].

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# Train glmnet with custom trainControl and tuning: model
model <- train(
  ___, 
  ___,
  tuneGrid = ___(
    ___,
    ___
  ),
  method = ___,
  trControl = ___
)

# Print model to console


# Print maximum ROC statistic
Modifica ed esegui il codice