CommencerCommencez gratuitement

Transformations d’entrées : la « crosse de hockey » (2)

Dans le dernier exercice, vous avez vu qu’un modèle quadratique semble mieux s’ajuster aux données houseprice qu’un modèle linéaire. Dans cet exercice, vous allez vérifier si le modèle quadratique fonctionne mieux sur des données hors échantillon. Comme ce jeu de données est petit, vous allez utiliser la validation croisée. La formule quadratique fmla_sqr que vous avez créée dans l’exercice précédent et le tableau houseprice sont à votre disposition.

Pour comparer, le code fourni calculera les prédictions de validation croisée d’un modèle linéaire price ~ size.

Cet exercice fait partie du cours

<cours>Apprentissage supervisé en R : Régression</cours>
Voir le cours

Instructions de l’exercice

  • Utilisez kWayCrossValidation() pour créer un plan de partition pour une validation croisée en 3 folds.
    • Vous pouvez définir les 3ᵉ et 4ᵉ arguments de la fonction à NULL.
  • Examinez et exécutez le code fourni pour obtenir les prédictions de validation croisée en 3 folds du modèle price ~ size et ajoutez-les dans 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 fourni vous donne la procédure.
    • Vous pouvez utiliser le plan de partition que vous avez déjà créé.
  • Complétez les zones vides pour réorganiser les prédictions et calculer les résidus.
  • Complétez les zones 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