87 lines
4.5 KiB
Plaintext
87 lines
4.5 KiB
Plaintext
---
|
|
title: "ML 03 Régularisation de Tikhonov"
|
|
output:
|
|
bookdown::pdf_document2:
|
|
number_section: yes
|
|
toc: false
|
|
classoption: fleqn
|
|
---
|
|
|
|
```{r, include=FALSE}
|
|
source("ML1_01_intro.R", local = knitr::knit_global())
|
|
source("ML1_03_tikhonov.R", local = knitr::knit_global())
|
|
```
|
|
|
|
# Problèmes linéaires mal posés
|
|
|
|
Avec moins d'observations que de fonctions de base ($M<N$), le système $\mathbf{A}\mathbf{x}=\mathbf{b}$ ne possède pas de solution unique. Même quand $M \geq N$, le système linéaire peut posséder une solution approchée préférable à la solution optimale. C'est en particulier vrai quand plusieurs observations sont très proches à un coefficient multiplicatif près (on parle de colinéarités). Par exemple, soit le système linéaire suivant :
|
|
\[
|
|
\left( \begin{array}{cc}
|
|
1 & 1 \\
|
|
1 & 1.00001 \\
|
|
\end{array} \right)
|
|
\left( \begin{array}{c}
|
|
x_1 \\ x_2
|
|
\end{array} \right)
|
|
=
|
|
\left( \begin{array}{c}
|
|
1 \\ 0.99
|
|
\end{array} \right)
|
|
\]
|
|
Sa solution est $\mathbf{x}^T = (1001,-1000)$. Cependant, la solution approchée $\mathbf{x}^T = (0.5,0.5)$ semble préférable. En effet, la solution optimale a peu de chance de bien s'adapter à de nouvelles observations (par exemple, l'observation $(1,2)$ serait projetée sur l'étiquette -999).
|
|
|
|
# Ajout de contraintes de régularité
|
|
|
|
Ainsi, lorsqu'il faut choisir entre plusieurs solutions, il peut être efficace d'exprimer une préférence envers celles dont les coefficients (ou paramètres) ont de faibles valeurs. Cela consiste par exemple à minimiser $|x_1|+|x_2|+\dots$ (aussi noté $\|\mathbf{x}\|_1$, la "norme 1") ou encore $x_1^2+x_2^2+\dots$ (aussi noté $\|\mathbf{x}\|_2^2$, le carré de la "norme 2"). Dans ce dernier cas, il s'agit de résoudre un nouveau problème de minimisation :
|
|
|
|
\begin{align*}
|
|
\min_{\mathbf{x}} \|\mathbf{A}\mathbf{x}-\mathbf{b}\|^2_2 + \alpha \|\mathbf{x}|^2_2 \\
|
|
avec \quad 0 \leq \alpha
|
|
\end{align*}
|
|
|
|
C'est encore un problème de minimisation quadratique en $\mathbf{x}$ dont le minimum se découvre par annulation de la dérivée.
|
|
|
|
\begin{align*}
|
|
& \mathbf{0} = 2\mathbf{A}^T\mathbf{A}\mathbf{x} - 2\mathbf{A}^T\mathbf{b} + 2\alpha\mathbf{x} \\
|
|
=& \\
|
|
& \left( \mathbf{A}^T\mathbf{A} + \alpha \mathbf{I}_{n\times n} \right) \mathbf{x} = \mathbf{A}^T \mathbf{b}
|
|
\end{align*}
|
|
|
|
En pratique, il s'agit donc d'ajouter une petite valeur positive $\alpha$ aux éléments de la diagonale de la matrice de Gram. Cette approche porte plusieurs noms dont "régularisation de Tikhonov" ou "régression Ridge".
|
|
|
|
# Visulation de l'effet sur les paramètres de différents niveaux de régularisation
|
|
|
|
Sur notre exemple synthétique, nous affichons la fonction génératrice, le jeu de donnée et le polynôme de degré au plus sept découvert par régression ridge avec une valeur de $\alpha$ égale soit à $0$, soit à $10^{-4}$, soit à $1$.
|
|
|
|
```{r}
|
|
set.seed(1123)
|
|
# Image par f d'un échantillon uniforme sur l'intervalle [0,1], avec ajout d'un
|
|
# bruit gaussien de moyenne nulle et d'écart type 0.2
|
|
data = gendat(10,0.2)
|
|
|
|
par(mfrow=c(1,3))
|
|
coef <- ridge(0, data, 7)
|
|
plt(data,f,main=expression(paste(plain("Degré = "), 7, plain(", "), alpha,
|
|
plain(" = 0"))))
|
|
pltpoly(coef)
|
|
coef <- ridge(1E-4, data, 7)
|
|
plt(data,f,main=expression(paste(plain("Degré = "), 7, plain(", "), alpha,
|
|
plain(" = 1E-4"))))
|
|
pltpoly(coef)
|
|
coef <- ridge(1, data, 7)
|
|
plt(data,f,main=expression(paste(plain("Degré = "), 7, plain(", "), alpha,
|
|
plain(" = 1"))))
|
|
pltpoly(coef)
|
|
```
|
|
|
|
Plus le coefficient de régularisation $\alpha$ est faible, moins il contraint les paramètres (c'est-à-dire, les coefficients du polynôme) à conserver de petites valeurs et plus le polynôme découvert peut être complexe, au risque de provoquer du sur-apprentissage et donc de limiter la capacité du modèle à bien prédire les étiquettes de nouvelles observations. A l'inverse, plus le coefficient de régularisation est élevé, plus le modèle découvert sera simple, au risque de sous-apprendre en ne modélisant pas convenablement les variations propres au processus qui a généré les observations.
|
|
|
|
Pour mieux visualiser l'effet du coefficient de régularisation ridge, nous affichons les valeurs des coefficients du polynôme découvert pour différentes valeurs de $\alpha$. Plus $\alpha$ augmente, plus les coefficients du polynôme diminuent et tendent vers $0$.
|
|
|
|
```{r}
|
|
alphas <- c(1E-5, 1E-4, 1E-3, 1E-2, 1E-1, 1)
|
|
lcoef <- sapply(alphas, ridge, data, 7)
|
|
matplot(alphas, t(lcoef), type=c("b"), pch=1, col=1:8, log="x")
|
|
legend("topright", legend = 0:7, col=1:8, pch=1)
|
|
```
|