LoslegenKostenlos starten

Transformationen der Eingaben: der „Hockeyschläger“ (2)

In der letzten Übung hast du gesehen, dass ein quadratisches Modell die houseprice-Daten offenbar besser abbildet als ein lineares Modell. In dieser Übung prüfst du, ob das quadratische Modell auf Out-of-Sample-Daten tatsächlich besser abschneidet. Da dieser Datensatz klein ist, verwendest du Kreuzvalidierung. Die quadratische Formel fmla_sqr, die du in der letzten Übung erstellt hast, und der Data Frame houseprice stehen dir zur Verfügung.

Zum Vergleich berechnet der Beispielcode Kreuzvalidierungsvorhersagen aus einem linearen Modell price ~ size.

Diese Übung ist Teil des Kurses

<Kurs>Überwachtes Lernen in R: Regression</Kurs>
Kurs ansehen

Übungsanweisungen

  • Verwende kWayCrossValidation(), um einen Split-Plan für eine 3‑Fold‑Kreuzvalidierung zu erstellen.
    • Du kannst das 3. und 4. Argument der Funktion auf NULL setzen.
  • Sieh dir den Beispielcode an und führe ihn aus, um die Vorhersagen der 3‑Fold‑Kreuzvalidierung für das Modell price ~ size zu erhalten, und füge sie in der Spalte pred_lin hinzu.
  • Ermittle die Kreuzvalidierungsvorhersagen für den Preis als Funktion der quadrierten Größe. Weise sie der Spalte pred_sqr zu.
    • Der Beispielcode zeigt dir das Vorgehen.
    • Du kannst den bereits erstellten Split-Plan verwenden.
  • Fülle die Lücken aus, um die Vorhersagen zu pivotieren und die Residuen zu berechnen.
  • Fülle die Lücken aus, um das RMSE für die beiden Modelle zu vergleichen. Welches passt besser?

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

# 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 = ___)
Code bearbeiten und ausführen