Utvärdera en modelleringsprocess med n-delad korsvalidering
I den här övningen använder du splitPlan, den 3-delade korsvalideringsplanen från föregående övning, för att göra prediktioner med en modell som predikterar mpg$cty utifrån mpg$hwy.
Om dframe är träningsdata kan du lägga till en kolumn med korsvalideringsprediktioner i dataramen på följande sätt:
# 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,])
}
Korsvalidering ger en uppskattning av hur väl en modell tränad på all data kommer att prestera på nya data. Precis som vid uppdelning i test- och träningsdata bör korsvalideringsprestanda och träningsprestanda ligga nära varandra för en bra modelleringsprocess.
Dataramen mpg, korsvalideringsplanen splitPlan och funktionen rmse() har förinslästs.
Den här övningen är en del av kursen
Övervakad inlärning i R: Regression
Övningsinstruktioner
- Kör den 3-delade korsvalideringsplanen från
splitPlanoch lagra prediktorerna i kolumnenmpg$pred.cv.- Använd
lm()och formelncty ~ hwy.
- Använd
- Skapa en linjär regressionsmodell på all data i
mpg(formelcty ~ hwy) och tilldela prediktorerna tillmpg$pred. - Använd
rmse()för att beräkna roten ur medelkvadratfelet för prediktorerna från den fullständiga modellen (mpg$pred). Kom ihåg attrmse()tar två argument: de predikterade värdena och det faktiska utfallet. - Beräkna roten ur medelkvadratfelet för korsvalideringsprediktorerna. Är de två värdena ungefär lika?
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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
___(___, ___)