CommencezCommencez gratuitement

Transformations des entrées : le « bâton de hockey » (2)

Dans le dernier exercice, vous avez vu qu'un modèle quadratique semble mieux représenter les données houseprice qu'un modèle linéaire. Dans cet exercice, vous confirmerez si le modèle quadratique offrirait de meilleures performances sur des données hors échantillon. Comme cet ensemble de données est petit, vous utiliserez la validation croisée. La formule quadratique fmla_sqr que vous avez créée au dernier exercice et la trame de données houseprice sont à votre disposition.

Pour comparaison, le code d'exemple calculera les prédictions de validation croisée d'un modèle linéaire price ~ size.

Cette activité fait partie du cours

Apprentissage supervisé en R : régression

Voir le cours

Instructions de l’exercice

  • Utilisez kWayCrossValidation() pour créer un plan de partition pour une validation croisée à 3 plis.
    • Vous pouvez définir les 3e et 4e arguments de la fonction à NULL.
  • Examinez et exécutez le code d'exemple pour obtenir les prédictions de validation croisée à 3 plis du modèle price ~ size et ajoutez-les à la colonne pred_lin.
  • Obtenez les prédictions de validation croisée pour le prix en fonction de la taille au carré. Assignez-les à la colonne pred_sqr.
    • Le code d'exemple vous donne la procédure.
    • Vous pouvez utiliser le plan de partition que vous avez déjà créé.
  • Remplissez les espaces vides pour pivoter les prédictions et calculer les résidus.
  • Remplissez les espaces vides pour comparer la RMSE des deux modèles. Lequel s'ajuste le mieux ?

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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 = ___)
Modifier et exécuter le code