ÎncepețiÎncepe gratuit

Transformarea intrărilor: „bățul de hochei" (2)

În exercițiul anterior, ai observat că un model pătratic pare să se potrivească mai bine datelor houseprice decât un model liniar. În acest exercițiu, vei confirma dacă modelul pătratic ar performa mai bine pe date neincluse în antrenament. Deoarece acest set de date este mic, vei folosi validarea încrucișată. Formula pătratică fmla_sqr creată în exercițiul anterior și setul de date houseprice îți sunt puse la dispoziție.

Pentru comparație, codul exemplu va calcula predicțiile prin validare încrucișată ale unui model liniar price ~ size.

Acest exercițiu face parte din cursul

Învățare supervizată în R: Regresia

Vezi cursul

Instrucțiuni pentru exercițiu

  • Folosește kWayCrossValidation() pentru a crea un plan de împărțire pentru o validare încrucișată cu 3 pliuri.
    • Poți seta al 3-lea și al 4-lea argument al funcției la NULL.
  • Examinează și rulează codul exemplu pentru a obține predicțiile prin validare încrucișată cu 3 pliuri ale modelului price ~ size și adaugă-le în coloana pred_lin.
  • Obține predicțiile prin validare încrucișată pentru prețuri ca funcție de mărimea ridicată la pătrat. Atribuie-le coloanei pred_sqr.
    • Codul exemplu îți oferă procedura.
    • Poți folosi planul de împărțire creat deja.
  • Completează spațiile libere pentru a pivota predicțiile și a calcula reziduurile.
  • Completează spațiile libere pentru a compara RMSE pentru cele două modele. Care dintre ele se potrivește mai bine?

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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 = ___)
Editează și rulează codul