Progrès sur la rédaction du cours ML.
This commit is contained in:
parent
830c3f55c3
commit
639e14824c
@ -84,3 +84,23 @@ lcoef <- sapply(alphas, ridge, data, 7)
|
|||||||
matplot(alphas, t(lcoef), type=c("b"), pch=1, col=1:8, log="x")
|
matplot(alphas, t(lcoef), type=c("b"), pch=1, col=1:8, log="x")
|
||||||
legend("topright", legend = 0:7, col=1:8, pch=1)
|
legend("topright", legend = 0:7, col=1:8, pch=1)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Régularisation et complexité
|
||||||
|
|
||||||
|
Essayons de mieux comprendre les raisons pour lesquelles la régularisation peut être efficace. Nous allons montrer qu'elle réduit la complexité d'un modèle prédictif. Dans ce contexte, qu'est-ce que la complexité ? C'est la sensibilité du modèle au bruit présent dans les données. Qu'est-ce que le bruit ? Il est possible de le définir après avoir fait l'hypothèse d'une famille de modèles qui auraient pu générer les données observées.
|
||||||
|
|
||||||
|
Prenons l'exemple d'un modèle linéaire : $F(\mathbf{X}) = \mathbf{W}^T\mathbf{X} + b$. Posons ensuite $\mathbf{X^*} = \mathbf{X} + \mathbf{\epsilon}$ avec $\mathbf{\epsilon}$ un faible bruit ($\|\epsilon\|$ est petit). $\mathbf{X}$ et $\mathbf{X^*}$ étant proches, une hypothèse de régularité demande que $F(\mathbf{X})$ et $F(\mathbf{X^*})$ le soient aussi. La proximité de $F(\mathbf{X})$ et $F(\mathbf{X^*})$ peut se mesurer avec $|F(\mathbf{X}) - F(\mathbf{X^*})|$.
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
& |F(\mathbf{X}) - F(\mathbf{X^*})| \\
|
||||||
|
= \{& F(\mathbf{X}) = \mathbf{W}^T\mathbf{X} + b \} \\
|
||||||
|
& |\mathbf{W}^T\mathbf{X} - \mathbf{W}^T\mathbf{X^*}| \\
|
||||||
|
= \phantom{\{}& \\
|
||||||
|
& |\mathbf{W}^T(\mathbf{X}-\mathbf{X^*})| \\
|
||||||
|
= \{& \mathbf{X^*} = \mathbf{X} + \mathbf{\epsilon} \} \\
|
||||||
|
& |\mathbf{W}^T \mathbf{\epsilon}| \\
|
||||||
|
\leq \{& \text{Inégalité de Cauchy-Schwarz} \} \\
|
||||||
|
& \|\mathbf{W}\|_2 \|\mathbf{\epsilon}\|_2 \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Donc, en pénalisant les grandes valeurs de $\|\mathbf{W}\|_2$, on réduit la sensibilité du modèle à de petites perturbations dans les données observées. Autrement dit, par l'ajout de régularisation, les prédictions associées aux plus proches voisins de $\mathbf{X}$ tendent à être similaires à celle associée à $\mathbf{X}$.
|
Binary file not shown.
@ -76,9 +76,63 @@ Rappelons la décomposition en valeurs singulière d'une matrice $\mathbf{A} \in
|
|||||||
knitr::include_graphics("images/SVD_reduit.jpg")
|
knitr::include_graphics("images/SVD_reduit.jpg")
|
||||||
```
|
```
|
||||||
|
|
||||||
Nous avons les propriété fondamentales suivantes :
|
Nous avons les propriétés fondamentales suivantes :
|
||||||
|
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
Im(\mathbf{A}) &= Im(\mathbf{U_r}) & \mathbf{U_r}\mathbf{U_r}^T \text{ est un projecteur orthogonal sur } Im(\mathbf{A}) \\
|
Im(\mathbf{A}) &= Im(\mathbf{U_r}) & \mathbf{U_r}\mathbf{U_r}^T &: \text{ est un projecteur orthogonal sur } Im(\mathbf{A}) \\
|
||||||
Ker(\mathbf{A}) &= Im(\tilde{\mathbf{V_r}}^T) & \tilde{\mathbf{V_r}}\tilde{\mathbf{V_r}}^T \text{ est un projecteur orthogonal sur } Ker(\mathbf{A}) \\
|
Ker(\mathbf{A}) &= Im(\tilde{\mathbf{V_r}}) & \tilde{\mathbf{V_r}}\tilde{\mathbf{V_r}}^T &: \text{ est un projecteur orthogonal sur } Ker(\mathbf{A}) \\
|
||||||
|
Im(\mathbf{A}^T) &= Im(\mathbf{V_r}) & \mathbf{V_r}\mathbf{V_r}^T &: \text{ est un projecteur orthogonal sur } Im(\mathbf{A}^T) \\
|
||||||
|
Ker(\mathbf{A}^T) &= Im(\tilde{\mathbf{U_r}}) & \tilde{\mathbf{U_r}}\tilde{\mathbf{U_r}}^T &: \text{ est un projecteur orthogonal sur } Ker(\mathbf{A}^T) \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Montrons par exemple que $Ker(\mathbf{A})=Im(\tilde{\mathbf{V_r}})$, c'est-à-dire que les $N-r$ dernières colonnes de $\tilde{\mathbf{V_r}}$ forment une base orthonormale pour le noyau de $\mathbf{A}$, c'est-à-dire pour l'ensemble des vecteurs $\mathbf{x}$ tels que $\mathbf{A}\mathbf{x}=0$.
|
||||||
|
|
||||||
|
Considérons $\mathbf{x} \in Im(\tilde{\mathbf{V_r}})$, ce vecteur s'écrit sous la forme $\mathbf{x} = \sum_{i=r+1}^{N}w_i\mathbf{v_i}$ avec $w_i \in \mathbb{R}$ et $\mathbf{v_i}$ la i-ème colonne de $\tilde{\mathbf{V_r}}$. Nous devons montrer que $\mathbf{A}\mathbf{x}=0$.
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
& \mathbf{A}\mathbf{x} \\
|
||||||
|
= \{& \text{Par définition de $\mathbf{x}$.} \} \\
|
||||||
|
& \mathbf{A}\sum_{i=r+1}^{N}w_i\mathbf{v_i} \\
|
||||||
|
= \{& \text{Par linéarité.} \} \\
|
||||||
|
& \sum_{i=r+1}^{N}w_i(\mathbf{A}\mathbf{v_i}) \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Il suffit donc de montrer que chaque $\mathbf{A}\mathbf{v_i}$ est nul.
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
& \mathbf{A}\mathbf{v_i} \\
|
||||||
|
= \{& \text{SVD de $\mathbf{A}$} \} \\
|
||||||
|
& (\mathbf{U}\mathbf{\Sigma}\mathbf{V}^T) \mathbf{v_i} \\
|
||||||
|
= \{& \text{Les colonnes de $\mathbf{V}$ sont orthonormales et $\mathbf{v_i}$ est une colonne de $\mathbf{V}$.} \\
|
||||||
|
\phantom{=}\phantom{\{}& \text{Donc $\mathbf{V}^T \mathbf{v_i} = \mathbf{e_i}$ le vecteur avec des 0 partout sauf le 1 en position $i$.} \} \\
|
||||||
|
& \mathbf{U}\mathbf{\Sigma}\mathbf{e_i} \\
|
||||||
|
= \{& \mathbf{\Sigma}\mathbf{e_i} = 0 \text{ car à partir de la (r+1)ème ligne, toutes les lignes de $\mathbf{\Sigma}$ sont nulles et $i \geq r+1$.} \} \\
|
||||||
|
& 0 \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
# Projection sur une base quelconque
|
||||||
|
|
||||||
|
Nous cherchons à projeter un vecteur $\mathbf{v}$ sur l'espace des colonnes d'une matrice $\mathbf{A}$. Notons le résultat de cette projection $\mathbf{y} \in Im(\mathbf{A})$. $\mathbf{y}-\mathbf{v}$ est orthogonal à $Im(\mathbf{A})$ (c'est-à-dire qu'il appartient à $Ker(\mathbf{A})$). Autrement dit, en posant $\mathbf{y}=\mathbf{A}\mathbf{x}$, nous avons :
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
& \mathbf{a_j}^T (\mathbf{y}-\mathbf{v}) = 0, \forall j \\
|
||||||
|
= \{& \text{Posons $\mathbf{y}=\mathbf{A}\mathbf{x}$.} \} \\
|
||||||
|
& \mathbf{a_j}^T (\mathbf{A}\mathbf{x}-\mathbf{v}) = 0, \forall j \\
|
||||||
|
= \{& \text{Linéarité de la multiplication matricielle.} \} \\
|
||||||
|
& \mathbf{A}^T (\mathbf{A}\mathbf{x}-\mathbf{v}) = \mathbf{0} \\
|
||||||
|
= \phantom{\{}& \\
|
||||||
|
& \mathbf{A}^T\mathbf{A}\mathbf{x} = \mathbf{A}^T\mathbf{v} \\
|
||||||
|
= \{& \text{Si $\mathbf{A}^T\mathbf{A}$ est inversible.} \} \\
|
||||||
|
& \mathbf{x} = (\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T\mathbf{v} \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Ainsi, la projection $\mathbf{y} = \mathbf{A}\mathbf{x} = \mathbf{A}(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T\mathbf{v}$. Nous trouvons donc que $\mathbf{A}(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T$ est un projecteur orthogonal sur l'espace des colonnes de $\mathbf{A}$. En fait, il est simple de vérifier que ce projecteur est $\mathbf{U_r}\mathbf{U_r}^T$ :
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\mathbf{A} &= \mathbf{U_r}\mathbf{\Sigma_r}\mathbf{V_r}^T \\
|
||||||
|
\mathbf{A}^T &= \mathbf{V_r}\mathbf{\Sigma_r}\mathbf{U_r}^T \\
|
||||||
|
\mathbf{A}^T\mathbf{A} &= \mathbf{V_r}\mathbf{\Sigma_r}^2\mathbf{V_r}^T \\
|
||||||
|
(\mathbf{A}^T\mathbf{A})^{-1} &= \mathbf{V_r}\mathbf{\Sigma_r}^{-2}\mathbf{V_r}^T \\
|
||||||
|
(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T &= \mathbf{V_r}\mathbf{\Sigma_r}^{-1}\mathbf{U_r}^T \\
|
||||||
|
\mathbf{A}(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T &= \mathbf{U_r}\mathbf{U_r}^T \\
|
||||||
\end{align*}
|
\end{align*}
|
Binary file not shown.
197
ML1_12_factorisation_qr.Rmd
Normal file
197
ML1_12_factorisation_qr.Rmd
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
---
|
||||||
|
title: "ML 12 Factorisation QR"
|
||||||
|
output:
|
||||||
|
bookdown::pdf_document2:
|
||||||
|
number_section: yes
|
||||||
|
extra_dependencies:
|
||||||
|
algorithm2e: [ruled,vlined,linesnumbered]
|
||||||
|
toc: false
|
||||||
|
classoption: fleqn
|
||||||
|
---
|
||||||
|
|
||||||
|
# Factorisation QR
|
||||||
|
|
||||||
|
Nous introduisons une décomposition matricielle qui nous permettra plus tard d'implémenter les calculs des décompositions en valeurs propres et en valeurs singulières.
|
||||||
|
|
||||||
|
Nous cherchons des vecteurs orthonormaux qui forment une base pour les espaces couverts par les colonnes successives d'une matrice $\mathbf{A} \in \mathbb{R}^{M \times N}$. Notons :
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
<\mathbf{a_1}> &: \text{l'espace (la ligne) couvert par la première colonne de $\mathbf{A}$} \\
|
||||||
|
<\mathbf{a_1}, \mathbf{a_2}> &: \text{l'espace (le plan) couvert par les deux premières colonne de $\mathbf{A}$} \\
|
||||||
|
\text{Etc.} &: \text{Etc.} \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Nous avons $<\mathbf{a_1}> \subseteq <\mathbf{a_1}, \mathbf{a_2}> \subseteq \dots \subseteq <\mathbf{a_1}, \mathbf{a_2}, \dots, \mathbf{a_N}>$.
|
||||||
|
|
||||||
|
Nous cherchons des vecteurs orthogonaux $\mathbf{q_i}$ tels que :
|
||||||
|
\[
|
||||||
|
<\mathbf{q_1}, \mathbf{q_2}, \dots, \mathbf{q_j}> = <\mathbf{a_1}, \mathbf{a_2}, \dots, \mathbf{a_j}> \quad \text{pour } j=1,2,\dots,N
|
||||||
|
\]
|
||||||
|
|
||||||
|
Ce qui peut s'écrire sous une forme matricielle :
|
||||||
|
\[
|
||||||
|
(\mathbf{a_1} \; \mathbf{a_2} \; \dots \; \mathbf{a_N}) =
|
||||||
|
(\mathbf{q_1} \; \mathbf{q_2} \; \dots \; \mathbf{q_N})
|
||||||
|
\left( \begin{array}{cccc}
|
||||||
|
r_{11} & r_{12} & \dots & r_{1N} \\
|
||||||
|
0 & r_{22} & \dots & r_{2N} \\
|
||||||
|
\dots & \dots & \dots & \dots \\
|
||||||
|
0 & 0 & \dots & r_{NN}
|
||||||
|
\end{array} \right)
|
||||||
|
\]
|
||||||
|
|
||||||
|
Sans perte de généralité, considérons la situation où $M>N$. Nous appelons alors cette expression, $\mathbf{A}=\mathbf{\hat{Q}}\mathbf{\hat{R}}$ (avec $\mathbf{\hat{Q}} \in \mathbb{R}^{M \times N}$ et $\mathbf{\hat{R}} \in \mathbb{R}^{N \times N}$), la forme réduite de la factorisation QR.
|
||||||
|
|
||||||
|
Nous pouvons aussi considérer la forme dite complète de la factorisation QR, avec $\mathbf{Q} \in \mathbb{R}^{M \times M}$ et $\mathbf{R} \in \mathbb{R}^{M \times N}$. Dans ce cas, les $M-N$ dernières lignes de $\mathbf{R}$ sont nulles et il suffit de compléter $\mathbf{\hat{Q}}$ en lui ajoutant $M-N$ colonnes orthogonales.
|
||||||
|
|
||||||
|
# Orthogonalisation de Gram-Schmidt
|
||||||
|
|
||||||
|
Nous présentons l'algorithme de Gram-Schmidt pour la décomposition QR.
|
||||||
|
|
||||||
|
Le principe est de construire $\mathbf{q_j}$ orthogonal à $\mathbf{q_1}, \mathbf{q_2}, \dots, \mathbf{q_{j-1}}$ en retirant à la colonne $\mathbf{a_j}$ ses composantes selon les directions de $\mathbf{q_1}, \mathbf{q_2}, \dots, \mathbf{q_{j-1}}$ :
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\mathbf{v_j} &= \mathbf{a_j} - (\mathbf{q_1}^T\mathbf{a_j})\mathbf{q_1} - (\mathbf{q_2}^T\mathbf{a_j})\mathbf{q_2} - \dots - (\mathbf{q_{j-1}}^T\mathbf{a_j})\mathbf{q_{j-1}} \\
|
||||||
|
\mathbf{q_j} &= \mathbf{v_j} / \|\mathbf{v_j}\| \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Nous obtenons ainsi la matrice $\mathbf{\hat{Q}}$. Pour $\mathbf{\hat{R}}$, nous avons, par construction des $\mathbf{q_j}$ :
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
r_{ij} &= \mathbf{q_i}^T \mathbf{a_j} &\phantom{,} i \neq j \\
|
||||||
|
|r_{jj}| &= \| \mathbf{a_j} - \sum_{i=1}^{j-1} r_{ij} \mathbf{q_i} \| &\phantom{,} \text{par convention, nous choisissons $r_{jj}>0$} \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Nous avons ainsi dérivé l'algorithme classique de Gram-Schmidt :
|
||||||
|
|
||||||
|
\begin{algorithm}[H]
|
||||||
|
\DontPrintSemicolon
|
||||||
|
\NoCaptionOfAlgo
|
||||||
|
\SetAlgoLined
|
||||||
|
\SetKwInput{Res}{Résultat}
|
||||||
|
\SetKwInOut{Input}{Entrée}\SetKwInOut{Output}{Sortie}
|
||||||
|
\SetKwFor{Pour}{pour}{faire}{finpour}
|
||||||
|
\SetKw{KwTo}{à}
|
||||||
|
\Res{Décomposition QR de la matrice A}
|
||||||
|
\Input{$\mathbf{A} \in \mathbb{R}^{M \times N}$, avec $M \geq N$}
|
||||||
|
\Output{$\mathbf{Q} \in \mathbb{R}^{M \times N}$ une matrice orthonormale \\
|
||||||
|
$\mathbf{R} \in \mathbb{R}^{N \times N}$ une matrice triangulaire supérieure \\
|
||||||
|
telles que $\mathbf{A} = \mathbf{Q} \mathbf{R}$}
|
||||||
|
\BlankLine
|
||||||
|
\Pour{$j \gets 1$ \KwTo $N$}{
|
||||||
|
$\mathbf{v_j} \gets \mathbf{a_j}$ \;
|
||||||
|
\Pour{$i \gets 1$ \KwTo $j-1$}{
|
||||||
|
$r_{ij} \gets \mathbf{q_i}^T\mathbf{a_j}$ \;
|
||||||
|
$\mathbf{v_j} \gets \mathbf{v_j} - r_{ij}\mathbf{q_i}$ \;
|
||||||
|
}
|
||||||
|
$r_{jj} \gets \| \mathbf{v_j} \|$ \;
|
||||||
|
$\mathbf{q_j} \gets \mathbf{v_j} / r_{jj}$ \;
|
||||||
|
}
|
||||||
|
\caption{Gram-Schmidt classique (GS)}
|
||||||
|
\end{algorithm}
|
||||||
|
|
||||||
|
# Algorithme de Gram-Schmidt modifié
|
||||||
|
|
||||||
|
## Dérivation de l'algorithme de Gram-Schmidt modifié
|
||||||
|
|
||||||
|
Nous présentons une autre manière de voir ce résultat qui nous mènera à un algorithme équivalent mais numériquement plus stable.
|
||||||
|
|
||||||
|
Nous pouvons considérer que $\mathbf{q_j}$ est obtenu en projetant $\mathbf{a_j}$ sur l'espace orthogonal à $<\mathbf{a_1}, \mathbf{a_2}, \dots, \mathbf{a_{j-1}}>$, cet espace étant par construction égal à $<\mathbf{q_1}, \mathbf{q_2}, \dots, \mathbf{q_{j-1}}>$ :
|
||||||
|
\[
|
||||||
|
\mathbf{q_j} = \frac{\mathbf{P_j}\mathbf{a_j}}{\|\mathbf{P_j}\mathbf{a_j}\|} \quad ; \quad
|
||||||
|
\mathbf{P_j} = \mathbf{I} - \mathbf{Q_{j-1}}\mathbf{Q_{j-1}}^T \; \text{avec }
|
||||||
|
\mathbf{Q_{j-1}} = (\mathbf{q_1} \; \mathbf{q_2} \; \dots \mathbf{q_{j-1}})
|
||||||
|
\]
|
||||||
|
|
||||||
|
De façon équivalente, $\mathbf{P_j}$ peut s'exprimer comme le produit de projecteurs sur les espaces orthogonaux à $\mathbf{q_1}$, puis $\mathbf{q_2}$, etc. jusqu'à $\mathbf{q_{j-1}}$ :
|
||||||
|
\[
|
||||||
|
\mathbf{P_j} = \mathbf{P_{\bot \mathbf{q_{j-1}}}} \mathbf{P_{\bot \mathbf{q_{j-2}}}} \dots
|
||||||
|
\mathbf{P_{\bot \mathbf{q_{2}}}} \mathbf{P_{\bot \mathbf{q_{1}}}} \quad
|
||||||
|
\text{avec } \mathbf{P_{\bot \mathbf{q}}} = \mathbf{I} - \mathbf{q}\mathbf{q}^T
|
||||||
|
\]
|
||||||
|
|
||||||
|
Dans la version classique de Gram-Schmidt, $\mathbf{v_j}=\mathbf{P_j}\mathbf{a_j}$.
|
||||||
|
|
||||||
|
Dans la version modifiée de Gram-Schmidt :
|
||||||
|
\[
|
||||||
|
\mathbf{v_j}=\mathbf{P_{\bot \mathbf{q_{j-1}}}} \mathbf{P_{\bot \mathbf{q_{j-2}}}} \dots
|
||||||
|
\mathbf{P_{\bot \mathbf{q_{2}}}} \mathbf{P_{\bot \mathbf{q_{1}}}}
|
||||||
|
\mathbf{a_j}
|
||||||
|
\]
|
||||||
|
|
||||||
|
Ainsi, nous observons que dès que $\mathbf{q_1}$ est connu ($\mathbf{q_1} = \mathbf{v_1} / \|\mathbf{v_1}\|$, $\mathbf{v_1} = \mathbf{a_1}$), nous pouvons appliquer $\mathbf{P_{\bot \mathbf{q_{1}}}}$ à $\mathbf{a_2}, \mathbf{a_3}, \dots, \mathbf{a_N}$. Puis, quand $\mathbf{q_2}$ est connu, nous pouvons appliquer $\mathbf{P_{\bot \mathbf{q_{2}}}}$ à $\mathbf{P_{\bot \mathbf{q_{1}}}}\mathbf{a_3}, \mathbf{P_{\bot \mathbf{q_{1}}}}\mathbf{a_4}, \dots, \mathbf{P_{\bot \mathbf{q_{1}}}}\mathbf{a_N}$. Etc. Nous en déduisons l'algorithme de Gram-Schmidt modifié.
|
||||||
|
|
||||||
|
\begin{algorithm}[H]
|
||||||
|
\DontPrintSemicolon
|
||||||
|
\NoCaptionOfAlgo
|
||||||
|
\SetAlgoLined
|
||||||
|
\SetKwInput{Res}{Résultat}
|
||||||
|
\SetKwInOut{Input}{Entrée}\SetKwInOut{Output}{Sortie}
|
||||||
|
\SetKwFor{Pour}{pour}{faire}{finpour}
|
||||||
|
\SetKw{KwTo}{à}
|
||||||
|
\Res{Décomposition QR de la matrice A}
|
||||||
|
\Input{$\mathbf{A} \in \mathbb{R}^{M \times N}$, avec $M \geq N$}
|
||||||
|
\Output{$\mathbf{Q} \in \mathbb{R}^{M \times N}$ une matrice orthonormale \\
|
||||||
|
$\mathbf{R} \in \mathbb{R}^{N \times N}$ une matrice triangulaire supérieure \\
|
||||||
|
telles que $\mathbf{A} = \mathbf{Q} \mathbf{R}$}
|
||||||
|
\BlankLine
|
||||||
|
\Pour{$i \gets 1$ \KwTo $N$}{
|
||||||
|
$\mathbf{v_i} \gets \mathbf{a_i}$ \;
|
||||||
|
}
|
||||||
|
\Pour{$i \gets 1$ \KwTo $N$}{
|
||||||
|
$r_{ii} \gets \|\mathbf{v_i}\|$ \;
|
||||||
|
$\mathbf{q_i} \gets \mathbf{v_i} / r_{ii}$ \;
|
||||||
|
\Pour{$j \gets i+1$ \KwTo $N$}{
|
||||||
|
$r_{ij} \gets \mathbf{q_i}^T\mathbf{v_j}$ \;
|
||||||
|
$\mathbf{v_j} \gets \mathbf{v_j} - r_{ij}\mathbf{q_i}$ \;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\caption{Gram-Schmidt modifié (MGS)}
|
||||||
|
\end{algorithm}
|
||||||
|
|
||||||
|
## Comparaison de la stabilité numérique des deux versions de l'algorithme de Gram-Schmidt
|
||||||
|
|
||||||
|
Observons comment de petites erreurs de calculs se propagent dans le cas de l'algorithme de Gram-Schmidt (GS). Mettons qu'une petite erreur ait été commise sur le calcul de $\mathbf{q_2}$ qui s'en trouve de ce fait n'être pas parfaitement perpendiculaire à $\mathbf{q_1}$ :
|
||||||
|
\[
|
||||||
|
\mathbf{q_1}^T\mathbf{q_2} = \epsilon > 0
|
||||||
|
\]
|
||||||
|
|
||||||
|
Quelle est l'effet de cette erreur sur la valeur de $\mathbf{v_3}$ ?
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\mathbf{v_3} &= \mathbf{a_3} - (\mathbf{q_1}^T\mathbf{a_3})\mathbf{q_1} -
|
||||||
|
(\mathbf{q_2}^T\mathbf{a_3})\mathbf{q_2} \\
|
||||||
|
\mathbf{q_2}^T\mathbf{v_3} &= \mathbf{q_2}^T\mathbf{a_3} - (\mathbf{q_1}^T\mathbf{a_3})\epsilon -
|
||||||
|
(\mathbf{q_2}^T\mathbf{a_3}) = - (\mathbf{q_1}^T\mathbf{a_3})\epsilon \\
|
||||||
|
\mathbf{q_1}^T\mathbf{v_3} &= \mathbf{q_1}^T\mathbf{a_3} - (\mathbf{q_1}^T\mathbf{a_3}) -
|
||||||
|
(\mathbf{q_2}^T\mathbf{a_3})\epsilon = - (\mathbf{q_2}^T\mathbf{a_3})\epsilon \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
L'erreur commise sur $\mathbf{q_2}$ s'est transmise à $\mathbf{q_3}$ qui n'est plus parfaitement orthogonal à $\mathbf{q_1}$ et $\mathbf{q_2}$.
|
||||||
|
|
||||||
|
Pour l'algorithme de Gram-Schmidt modifié (MGS), nous avons :
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\mathbf{v_3}^{(0)} &= \mathbf{a_3} \\
|
||||||
|
\mathbf{v_3}^{(1)} &= \mathbf{v_3}^{(0)} - \mathbf{q_1}^T\mathbf{v_3}^{(0)}\mathbf{q_1} \\
|
||||||
|
\mathbf{v_3} &= \mathbf{v_3}^{(1)} - \mathbf{q_2}^T\mathbf{v_3}^{(1)}\mathbf{q_2} \\
|
||||||
|
\mathbf{q_2}^T\mathbf{v_3} &= \mathbf{q_2}^T\mathbf{v_3}^{(1)} - \mathbf{q_2}^T\mathbf{v_3}^{(1)} = 0 \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Il n'y a pas d'erreur pour l'orthogonalité entre $\mathbf{q_3}$ et $\mathbf{q_2}$. Etudions maintenant l'erreur commise sur l'orthogonalité entre $\mathbf{q_3}$ et $\mathbf{q_1}$.
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\mathbf{q_1}^T\mathbf{v_3} &= \mathbf{q_1}^T\mathbf{v_3}^{(1)} - \mathbf{q_2}^T\mathbf{v_3}^{(1)}\epsilon \\
|
||||||
|
\mathbf{q_2}^T\mathbf{v_3}^{(1)} &= \mathbf{q_2}^T\mathbf{v_3}^{(0)} - \mathbf{q_1}^T\mathbf{v_3}^{(0)}\epsilon \\
|
||||||
|
\mathbf{q_1}^T\mathbf{v_3}^{(1)} &= \mathbf{q_1}^T\mathbf{v_3}^{(0)} - \mathbf{q_1}^T\mathbf{v_3}^{(0)} = 0 \\
|
||||||
|
\mathbf{q_1}^T\mathbf{v_3} &= -(\mathbf{q_2}^T\mathbf{v_3}^{(0)} - \mathbf{q_1}^T\mathbf{v_3}^{(0)}\epsilon) =
|
||||||
|
-\mathbf{q_2}^T\mathbf{v_3}^{(0)}\epsilon + \mathbf{q_1}^T\mathbf{v_3}^{(0)}\epsilon^2
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Ainsi, comme pour la version classique de Gram-Schmidt, une erreur de l'ordre de grandeur de $\epsilon$ est commise sur l'orthogonalité entre $\mathbf{q_1}$ et $\mathbf{q_3}$. Par contre, il n'y a pas de propagation de l'erreur pour l'orthogonalité entre $\mathbf{q_2}$ et $\mathbf{q_3}$. C'est pourquoi l'algorithme de Gram-Schmidt modifié est numériquement plus stable que l'algorithme de Gram-Schmidt classique.
|
||||||
|
|
||||||
|
# Autres algorithmes
|
||||||
|
|
||||||
|
Notons qu'une autre approche très souvent employée pour le calcul de la décomposition QR est la méthode dite de Householder. Elle assure le maintien d'une quasi parfaite orthogonalité des colonnes de $\mathbf{Q}$. Il existe également l'approche dite des rotations de Givens, plus facilement parallélisable et permettant la mise à jour de la décomposition suite à l'ajout d'une ligne à la matrice $\mathbf{X}$.
|
||||||
|
|
||||||
|
Par contre, Gram-Schmidt permet de calculer la forme réduite de la décomposition QR, alors que les algorithmes de Givens et Householder calculent la forme complète. Ainsi, Gram-Schmidt n'est pas tout à fait aussi stable mais peut parfois être plus efficace.
|
BIN
ML1_12_factorisation_qr.pdf
Normal file
BIN
ML1_12_factorisation_qr.pdf
Normal file
Binary file not shown.
72
ML1_13_puissance_iteree_par_blocs.Rmd
Normal file
72
ML1_13_puissance_iteree_par_blocs.Rmd
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
title: "ML 13 Puissance itérée par bloc et SVD"
|
||||||
|
output:
|
||||||
|
bookdown::pdf_document2:
|
||||||
|
number_section: yes
|
||||||
|
extra_dependencies:
|
||||||
|
algorithm2e: [ruled,vlined,linesnumbered]
|
||||||
|
toc: false
|
||||||
|
classoption: fleqn
|
||||||
|
---
|
||||||
|
|
||||||
|
# Principe et application à la décomposition en valeurs propres
|
||||||
|
|
||||||
|
Nous avons vu précédemment que la méthode de la puissance itérée permet de calculer la plus grande valeur propre et un vecteur propre associé pour une matrice carrée $\mathbf{A}$. La décomposition QR est au cœur d'une approche élégante pour étendre la méthode de la puissance itérée au calcul des $S$ plus grandes valeurs propres et lerus vecteurs propres associés.
|
||||||
|
|
||||||
|
Une itération consiste à multiplier $\mathbf{A}$ par un bloc $\mathbf{V} \in \mathbb{R}^{N \times S}$ de $S$ vecteurs colonnes. Si ce processus est répété, nous nous attendons à trouver le même résultat que pour la méthode de la puissance itérée : chaque colonne de $\mathbf{V}$ convergera vers le (même) plus grand vecteur propre.
|
||||||
|
|
||||||
|
Mais si, par une décomposition QR, nous forçons les colonnes de $\mathbf{V}$ à rester orthogonales, pour une matrice $\mathbf{A}$ symétrique, le processus itératif fera tendre ces colonnes vers différents vecteurs propres et la diagonale de $\mathbf{R}$ contiendra les valeurs propres correspondantes.
|
||||||
|
|
||||||
|
\begin{algorithm}[H]
|
||||||
|
\DontPrintSemicolon
|
||||||
|
\NoCaptionOfAlgo
|
||||||
|
\SetAlgoLined
|
||||||
|
\SetKwInput{Res}{Résultat}
|
||||||
|
\SetKwInOut{Input}{Entrée}\SetKwInOut{Output}{Sortie}
|
||||||
|
\SetKwFor{Tq}{tant que}{faire}{fintq}
|
||||||
|
\SetKw{KwTo}{à}
|
||||||
|
\Res{Vecteurs propres d'une matrice symétrique par la méthode de la puissance itérée par bloc}
|
||||||
|
\Input{$\mathbf{A} \in \mathbb{R}^{N \times N}$ symétrique \\
|
||||||
|
$\mathbf{V} \in \mathbb{R}^{N \times S}$}
|
||||||
|
\Output{Les colonnes de $\mathbf{V}$ sont les $S$ premiers vecteurs propres. \\
|
||||||
|
Les valeurs propres correspondantes sont sur la diagonale de $\mathbf{\Lambda}$.}
|
||||||
|
\BlankLine
|
||||||
|
\Tq{$err > \epsilon$}{
|
||||||
|
$\mathbf{B} \gets \mathbf{A}\mathbf{V}$ \;
|
||||||
|
$\mathbf{B} = \mathbf{Q}\mathbf{R}$ \;
|
||||||
|
$\mathbf{V} \gets S \text{ premières colonnes de } \mathbf{Q}$ \;
|
||||||
|
$\mathbf{\Lambda} \gets S \text{ premières valeurs diagonales de } R$ \;
|
||||||
|
$err \gets \|\mathbf{A}\mathbf{V} - \mathbf{V}\mathbf{\Lambda}\|$ \;
|
||||||
|
}
|
||||||
|
\caption{Puissance itérée par bloc pour les vecteurs propres}
|
||||||
|
\end{algorithm}
|
||||||
|
|
||||||
|
# Application à la décomposition en valeurs singulières
|
||||||
|
|
||||||
|
Nous pouvons de même adapter l'algorithme de la puissance itérée au cas du SVD pour calculer les $S$ plus grandes valeurs singulières et les vecteurs singuliers associés pour une matrice $\mathbf{A} \in \mathbb{R}^{M \times N}$.
|
||||||
|
|
||||||
|
\begin{algorithm}[H]
|
||||||
|
\DontPrintSemicolon
|
||||||
|
\NoCaptionOfAlgo
|
||||||
|
\SetAlgoLined
|
||||||
|
\SetKwInput{Res}{Résultat}
|
||||||
|
\SetKwInOut{Input}{Entrée}\SetKwInOut{Output}{Sortie}
|
||||||
|
\SetKwFor{Tq}{tant que}{faire}{fintq}
|
||||||
|
\SetKw{KwTo}{à}
|
||||||
|
\Res{Valeurs singulières d'une matrice symétrique par la méthode de la puissance itérée par bloc}
|
||||||
|
\Input{$\mathbf{A} \in \mathbb{R}^{M \times N}$ \\
|
||||||
|
$\mathbf{V} \in \mathbb{R}^{N \times S}$ peut être initialisée avec des $1$ sur la diagonale principale et des $0$ ailleurs.}
|
||||||
|
\Output{$\mathbf{U} \in \mathbb{R}^{M \times S}, \mathbf{V} \in \mathbb{R}^{N \times S}$ \\
|
||||||
|
$\mathbf{\Sigma} = diag(\sigma_1, \sigma_2, \dots, \sigma_S)$ \\
|
||||||
|
telles que $\mathbf{A}\mathbf{V} = \mathbf{U}\mathbf{\Sigma}$}
|
||||||
|
\BlankLine
|
||||||
|
\Tq{$err > \epsilon$}{
|
||||||
|
$\mathbf{A}\mathbf{V} = \mathbf{Q}\mathbf{R}$ \;
|
||||||
|
$\mathbf{U} \gets S \text{ premières colonnes de } \mathbf{Q}$ \;
|
||||||
|
$\mathbf{A}^T\mathbf{U} = \mathbf{Q}\mathbf{R}$ \;
|
||||||
|
$\mathbf{V} \gets S \text{ premières colonnes de } \mathbf{Q}$ \;
|
||||||
|
$\mathbf{\Sigma} \gets S \text{ premières lignes et colonnes de } R$ \;
|
||||||
|
$err \gets \|\mathbf{A}\mathbf{V} - \mathbf{U}\mathbf{\Sigma}\|$ \;
|
||||||
|
}
|
||||||
|
\caption{Puissance itérée par bloc pour le SVD}
|
||||||
|
\end{algorithm}
|
BIN
ML1_13_puissance_iteree_par_blocs.pdf
Normal file
BIN
ML1_13_puissance_iteree_par_blocs.pdf
Normal file
Binary file not shown.
54
ML1_14_geometrie_ridge_svd.Rmd
Normal file
54
ML1_14_geometrie_ridge_svd.Rmd
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
title: "ML 14 Géométrie de la régression ridge et SVD"
|
||||||
|
output:
|
||||||
|
bookdown::pdf_document2:
|
||||||
|
number_section: yes
|
||||||
|
extra_dependencies:
|
||||||
|
algorithm2e: [ruled,vlined,linesnumbered]
|
||||||
|
toc: false
|
||||||
|
classoption: fleqn
|
||||||
|
---
|
||||||
|
|
||||||
|
# Coefficients de la régression ridge en fonction du SVD
|
||||||
|
|
||||||
|
Exprimons le calcul des coefficients d'une régression ridge en fonction de la décomposition en valeurs singulières de la matrice des données observées $\mathbf{X} \in \mathbb{R}^{M \times N}$.
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
& \mathbf{\hat{\beta}_\lambda} \\
|
||||||
|
= \{& \text{Voir la dérivation de la régression ridge dans un précédent module.} \} \\
|
||||||
|
& (\mathbf{X}^T\mathbf{X} + \lambda\mathbf{I})^{-1}\mathbf{X}^T\mathbf{y} \\
|
||||||
|
= \{& \text{SVD de $\mathbf{X}$ : } \mathbf{U}\mathbf{D}\mathbf{V}^T \quad
|
||||||
|
\mathbf{U} \in \mathbb{R}^{M \times M} \; , \;
|
||||||
|
\mathbf{D} \in \mathbb{R}^{M \times N} \; , \;
|
||||||
|
\mathbf{V} \in \mathbb{R}^{N \times N} \} \\
|
||||||
|
& (\mathbf{V}\mathbf{D}^T\mathbf{U}^T\mathbf{U}\mathbf{D}\mathbf{V}^T + \lambda\mathbf{I})^{-1}
|
||||||
|
\mathbf{V}\mathbf{D}^T\mathbf{U}^T \mathbf{y} \\
|
||||||
|
= \{& \text{$\mathbf{U}$ et $\mathbf{V}$ sont orthogonales : } \mathbf{I} = \mathbf{V}\mathbf{V}^T \} \\
|
||||||
|
& (\mathbf{V}\mathbf{D}^T\mathbf{D}\mathbf{V}^T + \lambda\mathbf{V}\mathbf{V}^T)^{-1} \mathbf{V}\mathbf{D}^T\mathbf{U}^T \mathbf{y} \\
|
||||||
|
= \phantom{\{}& \\
|
||||||
|
& (\mathbf{V}(\mathbf{D}^T\mathbf{D} + \lambda\mathbf{I})\mathbf{V}^T)^{-1} \mathbf{V}\mathbf{D}^T\mathbf{U}^T \mathbf{y} \\
|
||||||
|
= \{& (\mathbf{X}\mathbf{Y})^{-1} = \mathbf{Y}^{-1} \mathbf{X}^{-1} \quad
|
||||||
|
\text{$\mathbf{V}$ est orthogonale : } \mathbf{V}^{-1} = \mathbf{V}^T\} \\
|
||||||
|
& \mathbf{V}(\mathbf{D}^T\mathbf{D} + \lambda\mathbf{I})^{-1}\mathbf{V}^T\mathbf{V}\mathbf{D}^T\mathbf{U}^T \mathbf{y} \\
|
||||||
|
= \phantom{\{}& \\
|
||||||
|
& \mathbf{V}(\mathbf{D}^T\mathbf{D} + \lambda\mathbf{I})^{-1}\mathbf{D}^T\mathbf{U}^T \mathbf{y} \\
|
||||||
|
= \{& \text{Soit $d_j$ le jème élément sur la diagonale de $\mathbf{D}$,
|
||||||
|
$\mathbf{u_j}$ et $\mathbf{v_j}$ les jèmes colonnes de respectivement $\mathbf{U}$ et $\mathbf{V}$} \} \\
|
||||||
|
& \sum_{d_j>0} \mathbf{v_j} \frac{d_j}{d_j^2 + \lambda} \mathbf{u_j}^T\mathbf{y} \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Remarquons ainsi que la décomposition en valeurs singulières de $\mathbf{X}$ donne les coefficients de la régression ridge pour toutes les valeurs possibles du coefficient de régularisation $\lambda$.
|
||||||
|
|
||||||
|
# Régression ridge et géométrie
|
||||||
|
|
||||||
|
Observons la relation entre les étiquettes prédites $\mathbf{\hat{y}_\lambda}$ et les étiquettes observées $\mathbf{y}$.
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\mathbf{\hat{y}_\lambda} &= \mathbf{X} \mathbf{\hat{\beta}_\lambda} \\
|
||||||
|
&= \mathbf{U}\mathbf{D}\mathbf{V}^T \mathbf{V}(\mathbf{D}^T\mathbf{D} + \lambda\mathbf{I})^{-1}\mathbf{D}^T\mathbf{U}^T \mathbf{y} \\
|
||||||
|
&= \sum_{d_j>0} \mathbf{u_j} \frac{d_j^2}{d_j^2 + \lambda} \mathbf{u_j}^T\mathbf{y} \\
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Nous remarquons qu'en labsence de régularisation, $\lambda = 0$, les valeurs estimées $\mathbf{\hat{y}}$ sont les projections sur les axes principaux $\mathbf{u_j}$ -- qui couvrent l'espace des colonnes de $\mathbf{X}$, i.e. $Im(\mathbf{X})$ -- des valeurs observées $\mathbf{y}$.
|
||||||
|
|
||||||
|
En présence de régularisation, $\lambda > 0$, les coordonnées, sur les axes principaux, de l'estimation $\mathbf{\hat{y}_\lambda}$ sont de plus en plus contractées lorsqu'on progresse vers les axes qui expliquent de moins en moins la variabilités des données.
|
BIN
ML1_14_geometrie_ridge_svd.pdf
Normal file
BIN
ML1_14_geometrie_ridge_svd.pdf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user