Skip to content
Snippets Groups Projects
Verified Commit d2313f20 authored by Michaël El Kharroubi's avatar Michaël El Kharroubi :satellite:
Browse files

Update the optimisation tp a bit

parent 3019a29e
No related branches found
No related tags found
No related merge requests found
Pipeline #14854 failed
...@@ -31,7 +31,7 @@ include-before: <script src="css/prism.js"></script> ...@@ -31,7 +31,7 @@ include-before: <script src="css/prism.js"></script>
* Réaliser un programme permettant de réaliser une régression linéaire * Réaliser un programme permettant de réaliser une régression linéaire
à l'aide de la méthode de la descente de gradient. à l'aide de la méthode de la descente de gradient.
* Tester ce programme sur des données synthétiques afin de valider * Tester ce programme sur des données synthétiques (générées aléatoirement) afin de valider
votre implémentation. votre implémentation.
# Travail à réaliser # Travail à réaliser
...@@ -45,8 +45,8 @@ Afin de *valider* votre implémentation, il faut d'abord ...@@ -45,8 +45,8 @@ Afin de *valider* votre implémentation, il faut d'abord
est aisé. est aisé.
On va chercher "la meilleure droite" On va chercher "la meilleure droite"
passant par un ensemble de points $\{(x_j, y_j)\}_{j=1}^N$. passant par un ensemble de points $\{(x_j, y_j)\}_{j=1}^N$ (Ex pour $N=3\ :\ \{(x_1,y_1), (x_2, y_2), (x_3, y_3)\}_{j=1}^3$).
Comme on l'a vu en cours, on cherche à minimiser la fonction de coût Comme on l'a vu en cours, on cherche à minimiser la fonction de coût (erreur quadratique)
$$ $$
E(a,b)=\sum_{j=1}^N(a\cdot x_j + b - y_j)^2. E(a,b)=\sum_{j=1}^N(a\cdot x_j + b - y_j)^2.
$$ $$
...@@ -68,7 +68,7 @@ En prenant comme référence la solution ci-dessus, ...@@ -68,7 +68,7 @@ En prenant comme référence la solution ci-dessus,
il faut à présent implémenter la méthode de la descente de gradient il faut à présent implémenter la méthode de la descente de gradient
pour minimiser $E(a,b)$. pour minimiser $E(a,b)$.
En partant d'une pente $a_0$ et d'une ordonnée à l'origine $b_0$, En partant d'une pente $a_0$ et d'une ordonnée à l'origine $b_0$ (choisies aléatoirement),
il faut itérativement construire de meilleures approximations il faut itérativement construire de meilleures approximations
$$ $$
\vectwo{a_{i+1}}{b_{i+1}}=\vectwo{a_i}{b_i}-\lambda \cdot \vec\nabla E(a_i, b_i), \vectwo{a_{i+1}}{b_{i+1}}=\vectwo{a_i}{b_i}-\lambda \cdot \vec\nabla E(a_i, b_i),
...@@ -82,18 +82,16 @@ où $\varepsilon>0$ est la précision souhaitée. ...@@ -82,18 +82,16 @@ où $\varepsilon>0$ est la précision souhaitée.
### Test ### Test
Afin de tester votre programme, vous devez générer un nuage de points. Afin de tester votre programme, vous devez générer un nuage de points $\{(x_j, y_j)\}_{j=1}^N$ aléatoirement.
Pour contrôler au mieux ce qui se passe, il est recommandé Pour contrôler au mieux ce qu'il se passe, il est recommandé
de générer des points aléatoirement le long d'une droite, de générer ces points aléatoirement le long d'une droite de pente $c$ et une ordonnée à l'origine $d$ que vous choisirez,
et de bruiter un peu le résultat. Vous choisissez et de bruiter un peu le résultat. Pour générer aléatoirement un point $(x_j, y_j)$, vous choisissez
$x_j$ entre deux bornes de votre choix (p.ex. 0 et 10) $x_j$ entre deux bornes de votre choix (p.ex. 0 et 1)
puis tirez un certain nombre de $x_j$. A partir de là puis, à partir de là vous construisez $y_j$ comme
vous construisez $y_j$ comme
$$ $$
y_j=c\cdot x_j+d + r_j, y_j=c\cdot x_j+d + r_j,
$$ $$
où $|r_j|$ est un "petit" nombre aléatoire devant $(c\cdot x_j+d)$, et $c$ et $d$ où $|r_j|$ est un "petit" nombre aléatoire devant $(c\cdot x_j+d)$.
(la pente et l'ordonnée à l'origine de votre droite) sont choisis par vos soins.
Il faut vous assurer que la solution analytique et la solution numérique Il faut vous assurer que la solution analytique et la solution numérique
soient très proches (à $\varepsilon$ près) et qu'elles soient également assez proches soient très proches (à $\varepsilon$ près) et qu'elles soient également assez proches
...@@ -106,6 +104,16 @@ Faites également varier la valeur maximale de $|r_j|$. Que se passe-t-il ...@@ -106,6 +104,16 @@ Faites également varier la valeur maximale de $|r_j|$. Que se passe-t-il
quand $|r_j|$ devient trop grand? N'hésitez pas à représenter quand $|r_j|$ devient trop grand? N'hésitez pas à représenter
graphiquement vos résultats. graphiquement vos résultats.
**Important** : Pour des raisons de pertes de précision obtenus après des calculs itératifs sur des nombres à virgule flottante.
Vous devrez choisir des valeurs avec les contraintes suivantes :
$$\begin{aligned}
x_j &\in\ [0,1]\\
c,d &\in\ )0,1]
\end{aligned}
$$
(Note : En pratique le domaine de nos données n'est pas restraint. On effectue donc une normalisation de nos données avant et après le calcul des paramètres de notre modèle.)
## Validation du modèle de régression ## Validation du modèle de régression
Lorsqu'on réalise une régression, on *modélise* Lorsqu'on réalise une régression, on *modélise*
...@@ -120,11 +128,11 @@ Il en existe un grand nombre de variantes, ici nous n'en verrons qu'une. ...@@ -120,11 +128,11 @@ Il en existe un grand nombre de variantes, ici nous n'en verrons qu'une.
Il s'agit ici de vérifier si le $a$ et le $b$ que nous avons Il s'agit ici de vérifier si le $a$ et le $b$ que nous avons
déterminés sont des valeurs qui continueraient à être correctes déterminés sont des valeurs qui continueraient à être correctes
si on ajoutait de nouveaux points à notre ensemble $\{(x_j, y_j)\}_{j=1}^N$. si on ajoutait de nouveaux points à notre ensemble $\{(x_j, y_j)\}_{j=1}^N$ (issues du même phénomène).
Il est souvent peu pratique de générer de nouveaux points, on se contente Il est souvent peu pratique de générer de nouveaux points, on se contente
donc de diviser notre jeu de données en plusieurs partie. Une partie donc de diviser notre jeu de données en plusieurs partie. Une partie
des points sera utilisée pour *entraîner* notre modèle (déterminer des points sera utilisée pour *entraîner* notre modèle (déterminer
un $a$ et un $b$) l'autre partie sera utilisée pour tester le modèle, un $a$ et un $b$) l'autre partie sera utilisée pour *tester* le modèle,
on calculera l'erreur effective $E(a,b)$ par rapport à cette seconde on calculera l'erreur effective $E(a,b)$ par rapport à cette seconde
partie des points. partie des points.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment