IniziaInizia gratis

Valutare una procedura di modellazione con la cross-validation a n fold

In questo esercizio userai splitPlan, il piano di cross-validation a 3 fold dell’esercizio precedente, per fare previsioni con un modello che predice mpg$cty a partire da mpg$hwy.

Se dframe è l’insieme di dati di training, un modo per aggiungere al frame una colonna con le previsioni di cross-validation è il seguente:

# Inizializza una colonna della lunghezza appropriata
dframe$pred.cv <- 0 

# k è il numero di fold
# splitPlan è il piano di cross-validation

for(i in 1:k) {
  # Ottieni lo split i-esimo
  split <- splitPlan[[i]]

  # Costruisci un modello sui dati di training 
  # di questo split 
  # (lm, in questo caso)
  model <- lm(fmla, data = dframe[split$train,])

  # fai le previsioni sui 
  # dati di applicazione di questo split
  dframe$pred.cv[split$app] <- predict(model, newdata = dframe[split$app,])
}

La cross-validation stima quanto bene un modello costruito su tutti i dati si comporterà su nuovi dati. Come per la suddivisione train/test, per una buona procedura di modellazione, le prestazioni in cross-validation e quelle in training dovrebbero essere simili.

Il data frame mpg, il piano di cross-validation splitPlan e la funzione rmse() sono già stati caricati.

Questo esercizio fa parte del corso

Supervised Learning in R: Regression

Visualizza il corso

Istruzioni dell'esercizio

  • Esegui il piano di cross-validation a 3 fold da splitPlan e inserisci le previsioni nella colonna mpg$pred.cv.
    • Usa lm() e la formula cty ~ hwy.
  • Crea un modello di regressione lineare su tutti i dati di mpg (formula cty ~ hwy) e assegna le previsioni a mpg$pred.
  • Usa rmse() per ottenere la root mean squared error delle previsioni del modello completo (mpg$pred). Ricorda che rmse() accetta due argomenti: i valori previsti e l’esito reale.
  • Calcola la root mean squared error delle previsioni di cross-validation. I due valori sono circa uguali?

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# mpg is available
summary(mpg)

# splitPlan is available
str(splitPlan)

# Run the 3-fold cross validation plan from splitPlan
k <- ___ # Number of folds
mpg$pred.cv <- 0 
for(i in ___) {
  split <- ___
  model <- lm(___, data = ___)
  mpg$pred.cv[___] <- predict(___, newdata = ___)
}

# Predict from a full model
mpg$pred <- ___(___(cty ~ hwy, data = mpg))

# Get the rmse of the full model's predictions
___(___, ___)

# Get the rmse of the cross-validation predictions
___(___, ___)
Modifica ed esegui il codice