Skip to content
Snippets Groups Projects

Update the optimisation tp a bit

Merged Michaël El Kharroubi requested to merge michael.elkharro/math_tech_info:master into master
1 file
+ 23
15
Compare changes
  • Side-by-side
  • Inline
@@ -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.
Loading