EmpezarEmpieza gratis

Transformaciones de entrada: la "hockey stick" (2)

En el ejercicio anterior, viste que un modelo cuadrático parece ajustarse mejor a los datos de houseprice que un modelo lineal. En este ejercicio, confirmarás si el modelo cuadrático funcionaría mejor con datos fuera de muestra. Como este conjunto de datos es pequeño, usarás validación cruzada. La fórmula cuadrática fmla_sqr que creaste en el ejercicio anterior y el data frame houseprice están disponibles para que los uses.

Para comparar, el código de ejemplo calculará predicciones de validación cruzada de un modelo lineal price ~ size.

Este ejercicio forma parte del curso

Aprendizaje supervisado en R: Regresión

Ver curso

Instrucciones del ejercicio

  • Usa kWayCrossValidation() para crear un plan de particionado para una validación cruzada de 3 particiones.
    • Puedes establecer el 3.º y 4.º argumentos de la función en NULL.
  • Revisa y ejecuta el código de ejemplo para obtener las predicciones de validación cruzada de 3 particiones del modelo price ~ size y añádelas a la columna pred_lin.
  • Obtén las predicciones de validación cruzada para price como función del tamaño al cuadrado. Asígnalas a la columna pred_sqr.
    • El código de ejemplo te da el procedimiento.
    • Puedes usar el plan de particionado que ya creaste.
  • Rellena los espacios en blanco para pivotar las predicciones y calcular los residuos.
  • Rellena los espacios en blanco para comparar el RMSE de los dos modelos. ¿Cuál se ajusta mejor?

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

# 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 y ejecutar código