Aan de slagGa gratis aan de slag

Evalueer een modelleringsprocedure met n-voudige crossvalidatie

In deze oefening gebruik je splitPlan, het 3-voudige crossvalidatieplan uit de vorige oefening, om voorspellingen te maken met een model dat mpg$cty voorspelt op basis van mpg$hwy.

Als dframe de trainingsdata zijn, dan kun je als volgt een kolom met crossvalidatie-voorspellingen aan het frame toevoegen:

# Initialiseer een kolom met de juiste lengte
dframe$pred.cv <- 0 

# k is het aantal folds
# splitPlan is het crossvalidatieplan

for(i in 1:k) {
  # Haal de i-de split op
  split <- splitPlan[[i]]

  # Bouw een model op de trainingsdata 
  # van deze split 
  # (lm, in dit geval)
  model <- lm(fmla, data = dframe[split$train,])

  # maak voorspellingen op de 
  # applicatiedata van deze split
  dframe$pred.cv[split$app] <- predict(model, newdata = dframe[split$app,])
}

Crossvalidatie voorspelt hoe goed een model dat op alle data is gebouwd, zal presteren op nieuwe data. Net als bij de test/train-split zouden bij een goede modelleringsprocedure de prestaties van crossvalidatie en training dicht bij elkaar moeten liggen.

De data frame mpg, het crossvalidatieplan splitPlan en de functie rmse() zijn al voor je geladen.

Deze oefening maakt deel uit van de cursus

Supervised Learning in R: Regressie

Cursus bekijken

Oefeninstructies

  • Voer het 3-voudige crossvalidatieplan uit van splitPlan en zet de voorspellingen in de kolom mpg$pred.cv.
    • Gebruik lm() en de formule cty ~ hwy.
  • Maak een lineair regressiemodel op alle mpg-data (formule cty ~ hwy) en zet de voorspellingen in mpg$pred.
  • Gebruik rmse() om de root mean squared error te berekenen van de voorspellingen van het volledige model (mpg$pred). Onthoud dat rmse() twee argumenten neemt: de voorspelde waarden en de werkelijke uitkomst.
  • Bereken de root mean squared error van de crossvalidatie-voorspellingen. Zijn de twee waarden ongeveer gelijk?

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# mpg is available
summary(mpg)

# splitPlan is available
str(splitPlan)

# Run the 3-fold cross validation plan from splitPlan
k <- ___ # Number of folds
mpg$pred.cv <- 0 
for(i in ___) {
  split <- ___
  model <- lm(___, data = ___)
  mpg$pred.cv[___] <- predict(___, newdata = ___)
}

# Predict from a full model
mpg$pred <- ___(___(cty ~ hwy, data = mpg))

# Get the rmse of the full model's predictions
___(___, ___)

# Get the rmse of the cross-validation predictions
___(___, ___)
Code bewerken en uitvoeren