Kom igångKom igång gratis

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

Visa kurs

Övningsinstruktioner

  • Kör den 3-delade korsvalideringsplanen från splitPlan och lagra prediktorerna i kolumnen mpg$pred.cv.
    • Använd lm() och formeln cty ~ hwy.
  • Skapa en linjär regressionsmodell på all data i mpg (formel cty ~ hwy) och tilldela prediktorerna till mpg$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 att rmse() 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
___(___, ___)
Redigera och kör kod