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
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.
- Vous pouvez définir les 3e et 4e arguments de la fonction à
- Examinez et exécutez le code d'exemple pour obtenir les prédictions de validation croisée à 3 plis du modèle
price ~ sizeet ajoutez-les à la colonnepred_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 = ___)