IniziaInizia gratis

Trasformazioni degli input: la "hockey stick" (2)

Nell'ultimo esercizio, hai visto che un modello quadratico sembra adattarsi meglio ai dati di houseprice rispetto a un modello lineare. In questo esercizio, confermerai se il modello quadratico si comporta meglio su dati fuori campione. Dato che questo insieme di dati è piccolo, userai la cross-validation. La formula quadratica fmla_sqr che hai creato nell'esercizio precedente e il data frame houseprice sono a tua disposizione.

Per confronto, il codice di esempio calcolerà le previsioni di cross-validation da un modello lineare price ~ size.

Questo esercizio fa parte del corso

Supervised Learning in R: Regression

Visualizza il corso

Istruzioni dell'esercizio

  • Usa kWayCrossValidation() per creare un piano di suddivisione per una cross-validation a 3 fold.
    • Puoi impostare il 3° e 4° argomento della funzione a NULL.
  • Esamina ed esegui il codice di esempio per ottenere le previsioni di cross-validation del modello price ~ size e aggiungile alla colonna pred_lin.
  • Ottieni le previsioni di cross-validation per price come funzione della dimensione al quadrato. Assegnale alla colonna pred_sqr.
    • Il codice di esempio ti fornisce la procedura.
    • Puoi usare il piano di suddivisione che hai già creato.
  • Compila gli spazi vuoti per riorganizzare le previsioni e calcolare i residui.
  • Compila gli spazi vuoti per confrontare l'RMSE dei due modelli. Quale si adatta meglio?

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# houseprice is available
summary(houseprice)

# fmla_sqr is available
fmla_sqr

# Create a splitting plan for 3-fold cross validation
set.seed(34245)  # set the seed for reproducibility
splitPlan <- ___

# Sample code: get cross-val predictions for price ~ size
houseprice$pred_lin <- 0  # initialize the prediction vector
for(i in 1:3) {
  split <- splitPlan[[i]]
  model_lin <- lm(price ~ size, data = houseprice[split$train,])
  houseprice$pred_lin[split$app] <- predict(model_lin, newdata = houseprice[split$app,])
}

# Get cross-val predictions for price as a function of size^2 (use fmla_sqr)
houseprice$pred_sqr <- 0 # initialize the prediction vector
for(i in 1:3) {
  split <- ___
  model_sqr <- lm(___, data = houseprice[split$train, ])
  houseprice$___[split$app] <- predict(___, newdata = houseprice[split$app, ])
}

# Pivot the predictions and calculate the residuals
houseprice_long <- houseprice %>%
  pivot_longer(cols = c('pred_lin', 'pred_sqr'), names_to = 'modeltype', values_to = 'pred') %>%
  mutate(residuals = ___)

# Compare the cross-validated RMSE for the two models
houseprice_long %>% 
  group_by(modeltype) %>% # group by modeltype
  summarize(rmse = ___)
Modifica ed esegui il codice