Ocena procedury modelowania za pomocą n-krotnej walidacji krzyżowej
W tym ćwiczeniu użyjesz splitPlan – planu 3-krotnej walidacji krzyżowej z poprzedniego ćwiczenia – aby wykonać predykcje z modelu przewidującego mpg$cty na podstawie mpg$hwy.
Jeśli dframe to dane treningowe, to jeden ze sposobów na dodanie kolumny predykcji z walidacji krzyżowej do ramki danych wygląda następująco:
# 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,])
}
Walidacja krzyżowa pozwala przewidzieć, jak model zbudowany na wszystkich danych będzie działać na nowych danych. Podobnie jak w przypadku podziału na zbiór treningowy i testowy, dla dobrej procedury modelowania wyniki walidacji krzyżowej i wyniki na danych treningowych powinny być zbliżone.
Ramka danych mpg, plan walidacji krzyżowej splitPlan oraz funkcja rmse() zostały wcześniej wczytane.
To ćwiczenie jest częścią kursu
Nadzorowane uczenie maszynowe w R: regresja
Instrukcje do ćwiczenia
- Uruchom plan 3-krotnej walidacji krzyżowej z
splitPlani zapisz predykcje w kolumniempg$pred.cv.- Użyj funkcji
lm()z formułącty ~ hwy.
- Użyj funkcji
- Zbuduj model regresji liniowej na wszystkich danych z
mpg(formułacty ~ hwy) i przypisz predykcje dompg$pred. - Użyj funkcji
rmse(), aby obliczyć pierwiastek błędu średniokwadratowego dla predykcji z pełnego modelu (mpg$pred). Pamiętaj, żermse()przyjmuje dwa argumenty: wartości przewidywane oraz rzeczywiste wartości wynikowe. - Oblicz pierwiastek błędu średniokwadratowego dla predykcji z walidacji krzyżowej. Czy obie wartości są zbliżone?
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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
___(___, ___)