НачатьНачать бесплатно

Оценка процедуры моделирования с помощью 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
___(___, ___)
Редактировать и запускать код