Kom igångKom igång gratis

Inputtransformationer: "hockeyklubban" (2)

I den förra övningen såg du att en kvadratisk modell verkar passa houseprice-datan bättre än en linjär modell. I den här övningen ska du bekräfta om den kvadratiska modellen även presterar bättre på data som modellen inte tränats på. Eftersom datamängden är liten använder du korsvalidering. Den kvadratiska formeln fmla_sqr som du skapade i den förra övningen och dataramen houseprice finns tillgängliga.

Som jämförelse beräknar exempelkoden korsvalideringsförutsägelser från en linjär modell: price ~ size.

Den här övningen är en del av kursen

Övervakad inlärning i R: Regression

Visa kurs

Övningsinstruktioner

  • Använd kWayCrossValidation() för att skapa en uppdelningsplan för en 3-folds korsvalidering.
    • Det tredje och fjärde argumentet till funktionen kan du sätta till NULL.
  • Granska och kör exempelkoden för att få 3-folds korsvalideringsförutsägelserna från modellen price ~ size och lägg till dem i kolumnen pred_lin.
  • Hämta korsvalideringsförutsägelserna för pris som en funktion av kvadrerad storlek. Tilldela dem till kolumnen pred_sqr.
    • Exempelkoden visar hur du går till väga.
    • Du kan använda den uppdelningsplan du redan har skapat.
  • Fyll i tomrummen för att pivotera förutsägelserna och beräkna residualerna.
  • Fyll i tomrummen för att jämföra RMSE för de två modellerna. Vilken passar datan bäst?

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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 = ___)
Redigera och kör kod