Оцініть процедуру моделювання за допомогою 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,])
}
Крос-валідація оцінює, наскільки добре модель, побудована на всіх даних, працюватиме на нових даних. Як і у випадку з поділом на train/test, для якісної процедури моделювання результати крос-валідації та навчальні результати мають бути близькими.
Датафрейм 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
___(___, ___)