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

Преобразование входных данных: «хоккейная клюшка» (2)

В предыдущем упражнении вы убедились, что квадратичная модель лучше описывает данные houseprice, чем линейная. В этом упражнении вы проверите, будет ли квадратичная модель работать лучше на новых данных. Поскольку набор данных небольшой, воспользуйтесь кросс-валидацией. Квадратичная формула fmla_sqr, созданная в предыдущем упражнении, и фрейм данных houseprice уже доступны для использования.

Для сравнения в примере кода вычисляются прогнозы кросс-валидации для линейной модели price ~ size.

Это упражнение является частью курса

Обучение с учителем в R: регрессия

Посмотреть курс

Инструкции к упражнению

  • С помощью kWayCrossValidation() создайте план разбивки для 3-блочной кросс-валидации.
    • Третий и четвёртый аргументы функции можно задать как NULL.
  • Изучите и запустите пример кода, чтобы получить прогнозы 3-блочной кросс-валидации для модели price ~ size, и запишите их в столбец pred_lin.
  • Получите прогнозы кросс-валидации для цены как функции квадрата площади. Сохраните их в столбец pred_sqr.
    • Используйте процедуру из примера кода.
    • Можно использовать уже созданный план разбивки.
  • Заполните пропуски, чтобы преобразовать прогнозы и вычислить остатки.
  • Заполните пропуски, чтобы сравнить RMSE для двух моделей. Какая из них описывает данные лучше?

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# houseprice is available
summary(houseprice)

# fmla_sqr is available
fmla_sqr

# Create a splitting plan for 3-fold cross validation
set.seed(34245)  # set the seed for reproducibility
splitPlan <- ___

# Sample code: get cross-val predictions for price ~ size
houseprice$pred_lin <- 0  # initialize the prediction vector
for(i in 1:3) {
  split <- splitPlan[[i]]
  model_lin <- lm(price ~ size, data = houseprice[split$train,])
  houseprice$pred_lin[split$app] <- predict(model_lin, newdata = houseprice[split$app,])
}

# Get cross-val predictions for price as a function of size^2 (use fmla_sqr)
houseprice$pred_sqr <- 0 # initialize the prediction vector
for(i in 1:3) {
  split <- ___
  model_sqr <- lm(___, data = houseprice[split$train, ])
  houseprice$___[split$app] <- predict(___, newdata = houseprice[split$app, ])
}

# Pivot the predictions and calculate the residuals
houseprice_long <- houseprice %>%
  pivot_longer(cols = c('pred_lin', 'pred_sqr'), names_to = 'modeltype', values_to = 'pred') %>%
  mutate(residuals = ___)

# Compare the cross-validated RMSE for the two models
houseprice_long %>% 
  group_by(modeltype) %>% # group by modeltype
  summarize(rmse = ___)
Редактировать и запускать код