Zacznij terazZacznij za darmo

Transformacje wejść: „kij hokejowy" (2)

W poprzednim ćwiczeniu zauważyłeś, że model kwadratowy wydaje się lepiej dopasowywać do danych houseprice niż model liniowy. W tym ćwiczeniu sprawdzisz, czy model kwadratowy rzeczywiście działa lepiej na danych spoza próby treningowej. Ponieważ ten zbiór danych jest mały, skorzystasz z walidacji krzyżowej. Do dyspozycji masz wzór kwadratowy fmla_sqr utworzony w poprzednim ćwiczeniu oraz ramkę danych houseprice.

Dla porównania, przykładowy kod oblicza predykcje z walidacji krzyżowej dla modelu liniowego price ~ size.

To ćwiczenie jest częścią kursu

Nadzorowane uczenie maszynowe w R: regresja

Zobacz kurs

Instrukcje do ćwiczenia

  • Użyj funkcji kWayCrossValidation(), aby utworzyć plan podziału dla 3-krotnej walidacji krzyżowej.
    • Trzeci i czwarty argument funkcji możesz ustawić na NULL.
  • Przejrzyj i uruchom przykładowy kod, aby uzyskać predykcje z 3-krotnej walidacji krzyżowej dla modelu price ~ size, i przypisz je do kolumny pred_lin.
  • Uzyskaj predykcje z walidacji krzyżowej dla ceny jako funkcji kwadratu rozmiaru. Przypisz je do kolumny pred_sqr.
    • Przykładowy kod pokazuje, jak to zrobić.
    • Możesz użyć już utworzonego planu podziału.
  • Uzupełnij luki, aby przekształcić predykcje i obliczyć reszty.
  • Uzupełnij luki, aby porównać RMSE dla obu modeli. Który z nich lepiej dopasowuje się do danych?

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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 = ___)
Edytuj i uruchom kod