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
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.
- Poți seta al 3-lea și al 4-lea argument al funcției la
- 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 coloanapred_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 = ___)