68 lines
2.3 KiB
Plaintext
68 lines
2.3 KiB
Plaintext
---
|
|
title: "04 Validation croisée"
|
|
author: Pierre-Edouard Portier
|
|
date: mars 2022
|
|
output: beamer_presentation
|
|
---
|
|
|
|
```{r, include=FALSE}
|
|
source("01_intro.R", local = knitr::knit_global())
|
|
source("04_validation_croisee.R", local = knitr::knit_global())
|
|
```
|
|
|
|
# Principe de la validation croisée
|
|
|
|
- Quelle valeur pour l'__hyperparamètre__ $\lambda$ ?
|
|
|
|
$$\hat{\boldsymbol\beta} = \left( \mathbf{X}^T\mathbf{X} + \lambda \mathbf{I}_{n\times n} \right)^{-1} \mathbf{X}^T \mathbf{y}$$
|
|
|
|
- __Validation croisée__ par partition du jeu de données
|
|
- __entraînement__ : estimer $\hat{\boldsymbol\beta}$ de chaque modèle
|
|
- __validation__ : choisir le modèle qui commet la plus faible erreur
|
|
- __test__ : estimer l'erreur du modèle retenu
|
|
|
|
# Validation croisée à K plis
|
|
|
|
- Partitionner le jeu de données en entraînement et test
|
|
- Partitionner le jeu d'entraînement en K plis disjoints
|
|
- Pour chaque valeur $\lambda_i$ de l'hyperparamètre $\lambda$
|
|
- Apprendre K modèles $M[\lambda_i,k]$ avec $k \in [1\dots K]$
|
|
- Entraîner $M[\lambda_i,k]$ sur les plis $1,2,\dots,k-1,k+1,\dots,K]$
|
|
- Tester $M[\lambda_i,k]$ sur le pli $k$
|
|
- Faire la moyenne des erreurs commises par les $K$ modèles $M[\lambda_i,\cdot]$ sur les jeux de test
|
|
- Choisir la valeur $\lambda_{best}$ qui correspond à la plus faible erreur
|
|
- Apprendre, sur tout le jeu d'entrâinement, un modèle avec l'hyperparamètre $\lambda_{best}$
|
|
- Tester ce modèle sur le jeu de test
|
|
|
|
# Moyenne des erreurs absolues pour différentes valeurs de $\lambda$
|
|
|
|
```{r, echo=FALSE}
|
|
set.seed(1123)
|
|
N <- 100
|
|
deg1 <- 8
|
|
data = gendat(N,0.2)
|
|
splitres <- splitdata(data,0.8)
|
|
entr <- splitres$entr
|
|
test <- splitres$test
|
|
lambdas <- c(1E-8, 1E-7, 1E-6, 1E-5, 1E-4, 1E-3, 1E-2, 1E-1, 1)
|
|
reskfold <- kfoldridge(K = 10, lambdas = lambdas, data = entr, degre = deg1)
|
|
boxplot(reskfold$maes, xlab="lambda", ylab="MAE")
|
|
```
|
|
|
|
# Meilleur poly de degré `r deg1` pour $\lambda=$ `r reskfold$lambda` sur l'entraînement
|
|
|
|
```{r, echo=FALSE}
|
|
plt(entr,f)
|
|
pltpoly(reskfold$coef)
|
|
```
|
|
|
|
# Meilleur poly de degré `r deg1` pour $\lambda=$ `r reskfold$lambda` sur le test
|
|
|
|
```{r, echo=FALSE}
|
|
testpred <- polyeval(reskfold$coef, test$X)
|
|
testmae <- mean(abs(testpred - test$Y))
|
|
plt(test,f)
|
|
pltpoly(reskfold$coef)
|
|
```
|
|
|
|
- Erreur absolue moyenne de `r testmae` sur le jeu de test |