ПочатиПочніть безкоштовно

Перетворення вхідних даних: «клюшка для хокею» (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 = ___)
Редагувати та запускати код