intro_to_ml/15_loocv.Rmd

50 lines
2.2 KiB
Plaintext

---
title: "15 Validation croisée un contre tous"
output:
bookdown::pdf_document2:
number_section: yes
toc: false
classoption: fleqn
---
```{r, include=FALSE}
source("15_loocv.R", local = knitr::knit_global())
```
La validation croisée un contre tous (LOOCV, Leave One Out Cross Validation) est un cas extrême de la validation croisée à k plis. Pour un jeu de données constitué de N observations, il s'agit de faire une validation croisée à N plis. Nous nous intéressons à estimer par LOOCV l'erreur commise par un modèle de régression ridge pour un choix de la valeur de l'hyper-paramètre $\lambda$.
Nous notons $\mathbf{\hat{\beta}_\lambda}^{(-i)}$ les coefficients de la régression ridge appris en utilisant $N-1$ observations, c'est-à-dire après avoir retiré la paire $(\mathbf{x_i},y_i)$.
\[
LOO_\lambda = \frac{1}{N} \sum_{i=1}^{N} y_i - \mathbf{x_i}^T \mathbf{\hat{\beta}_\lambda}^{(-i)}
\]
Nous détaillons l'expression de $\mathbf{\hat{\beta}_\lambda}^{(-i)}$.
\[
\mathbf{\hat{\beta}_\lambda}^{(-i)} = \left( \mathbf{X^{(-i)}}^T\mathbf{X^{(-i)}} + \lambda\mathbf{I} \right)^{-1} \mathbf{X^{(-i)}}^T y^{(-i)}
\]
Nous précisons le sens de $\mathbf{X^{(-i)}}^T\mathbf{X^{(-i)}} + \lambda\mathbf{I}$.
\[
\mathbf{X^{(-i)}}^T\mathbf{X^{(-i)}} + \lambda\mathbf{I} = \mathbf{X^T}\mathbf{X} + \lambda\mathbf{I} - \mathbf{x_i}\mathbf{x_i}^T
\]
Il faut remarquer que nous opérons la soustraction de la matrice $\mathbf{x_i}\mathbf{x_i}^T$ (un produit externe) et non du scalaire $\mathbf{x_i}^T\mathbf{x_i}$.
Comme étape intermédiaire, nous rappelons maintenant la définition de la matrice de chapeau (hat matrix) $\mathbf{H}$.
\[
\hat{y}_\lambda = \mathbf{X}\mathbf{\hat{\beta}_\lambda} = \mathbf{X} \left( \mathbf{X}^T \mathbf{X} + \lambda \mathbf{I}\right)^{-1} \mathbf{X}^T y = \mathbf{H} y
\]
Remarque : on parle de la matrice de chapeau, ou matrice de projection car elle ajoute un chapeau à $y$.
Nous notons $h_i$ les éléments diagonaux de la matrice $\mathbf{H}$.
\[
\mathbf{x_i}^T \left( \mathbf{X}^T \mathbf{X} + \lambda \mathbf{I}\right)^{-1} \mathbf{x_i} = \mathbf{H}_{ii} = h_i
\]
Rappelons également la formule de Morrison qui permet de calculer la mise à jour de l'inverse d'une matrice après l'ajout d'une matrice de rang 1.