Vyhodnocení postupu modelování pomocí n-násobné křížové validace
V tomto cvičení použiješ splitPlan, plán 3-násobné křížové validace z předchozího cvičení, k vytvoření predikcí z modelu, který předpovídá mpg$cty na základě mpg$hwy.
Pokud je dframe trénovací datová sada, jedním ze způsobů, jak do ní přidat sloupec s predikcemi z křížové validace, je následující postup:
# Initialize a column of the appropriate length
dframe$pred.cv <- 0
# k is the number of folds
# splitPlan is the cross validation plan
for(i in 1:k) {
# Get the ith split
split <- splitPlan[[i]]
# Build a model on the training data
# from this split
# (lm, in this case)
model <- lm(fmla, data = dframe[split$train,])
# make predictions on the
# application data from this split
dframe$pred.cv[split$app] <- predict(model, newdata = dframe[split$app,])
}
Křížová validace odhaduje, jak dobře bude model sestavený na všech datech fungovat na nových datech. Stejně jako u rozdělení na testovací a trénovací sadu platí, že u kvalitního postupu modelování by měly být výsledky křížové validace a výsledky na trénovacích datech blízko sebe.
Dataový rámec mpg, plán křížové validace splitPlan a funkce rmse() jsou předem načteny.
Toto cvičení je součástí kurzu
Supervised Learning in R: Regression
Pokyny k cvičení
- Spusť plán 3-násobné křížové validace z
splitPlana ulož predikce do sloupcempg$pred.cv.- Použij
lm()a vzoreccty ~ hwy.
- Použij
- Vytvoř model lineární regrese na všech datech z
mpg(vzoreccty ~ hwy) a přiřaď predikce dompg$pred. - Pomocí
rmse()zjisti střední kvadratickou chybu predikcí z plného modelu (mpg$pred). Připomeňme, žermse()přijímá dva argumenty: předpovězené hodnoty a skutečné výsledky. - Zjisti střední kvadratickou chybu predikcí z křížové validace. Jsou obě hodnoty přibližně stejné?
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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
___(___, ___)