Оценка процедуры моделирования с помощью n-кратной кросс-валидации
В этом упражнении вы будете использовать splitPlan — план 3-кратной кросс-валидации из предыдущего упражнения — для получения прогнозов модели, предсказывающей mpg$cty на основе mpg$hwy.
Если dframe — это обучающие данные, то один из способов добавить столбец прогнозов кросс-валидации в таблицу выглядит следующим образом:
# Инициализируем столбец нужной длины
dframe$pred.cv <- 0
# k — количество блоков (фолдов)
# splitPlan — план кросс-валидации
for(i in 1:k) {
# Получаем i-е разбиение
split <- splitPlan[[i]]
# Строим модель на обучающих данных
# из этого разбиения
# (в данном случае — lm)
model <- lm(fmla, data = dframe[split$train,])
# Делаем прогнозы на тестовых данных
# из этого разбиения
dframe$pred.cv[split$app] <- predict(model, newdata = dframe[split$app,])
}
Кросс-валидация позволяет оценить, насколько хорошо модель, обученная на всех данных, будет работать на новых данных. Как и при разбиении на обучающую и тестовую выборки, для хорошей процедуры моделирования результаты кросс-валидации и обучения должны быть близки.
Фрейм данных mpg, план кросс-валидации splitPlan и функция rmse() уже загружены.
Это упражнение является частью курса
Обучение с учителем в R: регрессия
Инструкции к упражнению
- Запустите план 3-кратной кросс-валидации из
splitPlanи сохраните прогнозы в столбецmpg$pred.cv.- Используйте
lm()и формулуcty ~ hwy.
- Используйте
- Постройте модель линейной регрессии на всех данных
mpg(формулаcty ~ hwy) и сохраните прогнозы вmpg$pred. - Используйте
rmse(), чтобы вычислить среднеквадратическую ошибку прогнозов полной модели (mpg$pred). Напомним, чтоrmse()принимает два аргумента: предсказанные значения и фактические значения целевой переменной. - Вычислите среднеквадратическую ошибку прогнозов кросс-валидации. Близки ли полученные значения друг к другу?
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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
___(___, ___)