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
Oefeninstructies
- Voer het 3-voudige crossvalidatieplan uit van
splitPlanen zet de voorspellingen in de kolommpg$pred.cv.- Gebruik
lm()en de formulecty ~ hwy.
- Gebruik
- Maak een lineair regressiemodel op alle
mpg-data (formulecty ~ hwy) en zet de voorspellingen inmpg$pred. - Gebruik
rmse()om de root mean squared error te berekenen van de voorspellingen van het volledige model (mpg$pred). Onthoud datrmse()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
___(___, ___)