ComeçarComece de graça

Transformações de entrada: o "hockey stick" (2)

No exercício anterior, você viu que um modelo quadrático parece se ajustar melhor aos dados houseprice do que um modelo linear. Neste exercício, você vai confirmar se o modelo quadrático teria um desempenho melhor em dados fora da amostra. Como este conjunto de dados é pequeno, você vai usar validação cruzada. A fórmula quadrática fmla_sqr que você criou no exercício anterior e o data frame houseprice estão disponíveis para você usar.

Para comparação, o código de exemplo calculará previsões de validação cruzada de um modelo linear price ~ size.

Este exercício faz parte do curso

Aprendizado Supervisionado em R: Regressão

Ver curso

Instruções do exercício

  • Use kWayCrossValidation() para criar um plano de divisão para uma validação cruzada com 3 dobras (folds).
    • Você pode definir o 3º e o 4º argumentos da função como NULL.
  • Examine e execute o código de exemplo para obter as previsões da validação cruzada em 3 dobras do modelo price ~ size e adicioná-las à coluna pred_lin.
  • Obtenha as previsões de validação cruzada para price como função de size ao quadrado. Atribua-as à coluna pred_sqr.
    • O código de exemplo fornece o procedimento.
    • Você pode usar o plano de divisão que já criou.
  • Preencha os espaços em branco para pivotar as previsões e calcular os resíduos.
  • Preencha os espaços em branco para comparar o RMSE dos dois modelos. Qual deles se ajusta melhor?

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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 = ___)
Editar e executar o código