-
Michaël El Kharroubi authoredMichaël El Kharroubi authored
author:
- Mathématiques en technologie de l'information
title: Travail pratique - Optimisation
autoSectionLabels: false
autoEqnLabels: true
eqnPrefix:
- "éq."
- "éqs."
chapters: true
numberSections: false
chaptersDepth: 1
sectionsDepth: 3
lang: fr
documentclass: article
papersize: A4
cref: false
urlcolor: blue
toc: false
include-before: <script src="css/prism.js"></script>
\newcommand{\dd}{\mathrm{d}} \newcommand{\real}{\mathbb{R}} \newcommand{\integer}{\mathbb{Z}} \renewcommand{\natural}{\mathbb{N}} \newcommand{\complex}{\mathbb{C}} \newcommand{\vectwo}[2]{\begin{pmatrix}#1 \ #2 \end{pmatrix}}
Objectif
Réaliser un programme permettant de réaliser une régression linéaire à une dimension à l'aide de la méthode de la descente de gradient. Tester ce programme sur des données synthétiques afin de valider votre implémentation.
Travail à réaliser
La régression linéaire à une seule variable
Solution analytique
Afin de valider votre implémentation, il faut d'abord étudier un cas simplifié où trouver la solution analytique est aisé.
On va chercher "la meilleure droite" passant par un ensemble de points
Votre premier exercice sera de trouver l'expression de
Solution numérique
En prenant comme référence la solution ci-dessus, il faut à présent implémenter la méthode de la descente de gradient pour minimiser
Test
Afin de tester votre programme, vous devez générer un nuage de points. Pour contrôler au mieux ce qui se passe, il est recommandé de générer des points aléatoirement le long d'une droite, et de bruiter un peu le résultat. Vous choisissez
Il faut vous assurer que la solution analytique et la solution numérique soient très proches (à
Tester votre code sur différentes valeurs de
Validation du modèle de régression
Lorsqu'on réalise une régression, on modélise notre nuage de points. Ici, on dit que le phénomène qui a généré les points suit une droite plutôt qu'une parabole ou une exponentielle ou n'importe quelle autre fonction. Afin de s'assurer que notre modèle correspond relativement bien à notre jeu de donnée, on peut faire ce qu'on appelle une validation croisée (ou cross validation en bon français). Cette technique est très utilisée en apprentissage automatique. Il en existe un grand nombre de variantes, ici nous n'en verrons qu'une.
Il s'agit ici de vérifier si le
Ici, pour simplifier on va séparer notre ensemble de
- entraîner le modèle avec les groupes G_1\cup G_2et tester surG_3,
- entraîner le modèle avec les groupes G_1\cup G_3et tester surG_2,
- entraîner le modèle avec les groupes G_2\cup G_3et tester surG_1.
Pour les nuages de point générés à la section précédente, quelle est la valeur de l'erreur pour chacun des groupes de tests? (Donner les valeurs sous forme de tableau peut être une bonne idée.) Comment interprétez vous ces résultats? N'hésitez pas à représenter graphiquement vos résultats.
Rendu
Il faut rendre un rapport de quelques pages (quelques: plus petit que 6). Ce rapport doit être relativement bref et expliquer votre travail. Il doit être composé de quatre parties principales:
- Une introduction générale qui décrit le cadre général du travail (ce que vous essayez de réaliser, par quels moyens, etc) et donner la structure de votre rapport (que contient chaque autre partie).
- Une partie "théorique" décrire les concepts et méthodes que vous utilisez si cela est nécessaire afin de permettre une bonne compréhension du reste de votre travail par le lecteur. Ceci est nécessaire pour comprendre comment vous arrivez aux résultats que vous présentez dans la partie suivante.
- Une partie résultats, où vous donnez les résultats que vous avez obtenus. Par exemple, répondre aux différentes questions posées dans cet énoncé, mais n'hésitez pas à développer.
- Une conclusion où vous résumez les résultats principaux de votre travail et éventuellement ouvrez sur comment vous pourriez améliorer votre travail ou l'étendre.
Le code doit être réalisé en C (afin de vous entraîner). La visualisation peut être faite avec l'outil de votre choix. Python avec la librairie matplotlib peut-être un bon choix.
Vous devez faire ce travail par groupe de 2 et aucune exception ne sera faite.
Vous devez rendre le rapport sur cyberlearn
. Le code doit être dans un repo git public
dont vous mettrez l'url sur cyberlearn
. N'oubliez pas de bien spécifier le nom
des deux membres du groupe dans le rapport et dans le code. Je devrais pouvoir
compiler et exécuter votre projet (pensez évidemment à créer un Makefile
).
La note est une combinaison de la note du code et du rapport.
Conseils et remarques
Ce travail est loin d'être simple à réaliser. Il demande de combiner beaucoup de concept vu ou pas en détail en cours. Utilisez le temps à disposition pendant les séance pour poser des questions et n'attendez pas le dernier moment.
La rédaction du rapport est également une tâche complexe et il s'agit de ne pas bâcler sa réalisation. C'est un exercice qui vous sera utile lorsque vous devrez écrire votre mémoire pour votre travail de bachelor.