Projet-1 L2-Apprentissage

Posted on Thu 10 October 2019 in cours

Projets d'introduction à l'apprentissage automatique

Dans le cadre du cours d'introduction à l'apprentissage, vous devrez réaliser deux mini-projets. Le premier projet aura pour objet le perceptron et son application à un nouveau jeu de données.

Le projet sera à réaliser en binôme.

Vous rendrez un rapport au format pdf que vous enverrez à l'adresse suivante aurelien.decelle@u-psud.fr avant le 10 novembre 2019 à 23h59, ainsi que le code source qui a servi à générer les résultats présentés dans le rapport. Il sera important pour l'évaluation de suivre les points suivants

  1. Sur le rapport

    • le rapport comportera une brève introduction, une présentation des résultats et, si nécessaire, les difficultés rencontrées et les solutions envisagées
    • le rapport ne doit pas comporter plus de 4 pages (2 feuilles recto/verso).
    • chaque figure devra comporter une légende expliquant ce qui est illustré, et la fonction du code permettant de générer la figure (il n'est pas nécessaire de mettre beaucoup de figures). Attention, une pénalité sera appliquée si une figure n'est pas reproductible. Barème : 3 points sur le rendu global. ATTENTION : si le rapport n'est pas rendu, vous perdez automatiquement les 3 points du rapport, ainsi que les 6 points des résultats (donc 9 points).
  2. Sur le code

    • il devra être clair et commenté, avec des noms de variables bien choisis
    • IMPORTANT : pour chaque figure présentée dans le rapport, vous écrirez une fonction permettant de générer les données (il faudra donc dans le code avoir une fonction spécifique permettant de générer les données). Le code sera évalué globalement sur 3 points.
  3. Evaluation de l'algorithme : il sera possible de rendre le projet à différents stades d'avancement en fonction de ce qui vous a été possible de faire

    • perceptron binaire simple : si vous n'avez pas pu faire fonctionner le perceptron multiclasse, vous pouvez rendre un projet fait avec le perceptron binaire (cf premiers tps). Néanmoins un tel rendu vous permettra au maximum d'avoir la note de 7/20 en rendant un rapport correctement écrit.
    • perceptron multiclasse : il permet d'avoir la note maximum sur le code qui sera sur 8 points.

Travaux à réaliser

Le jeu de données

Le travail à effectuer sera sur un nouveau jeu de données. Pour cela, il faudra télécharger le jeu de données EMNIST qui correspond à une extension de MNIST étudié en TP. Pour charger les données, il faut récupérer le fichier gzip.zip et extraire la partie intitulé byclass-train-labels et byclass-train-images. Ensuite, vous pourrez utiliser le module MnistReader comme précédement. Pour le projet, vous devrez effectuer les opérations suivantes:

  • extraire les images correspondants aux classes 10-21 du jeu de données (cela correspond à A, B, ..., L).
  • diviser en deux ensembles les données extraites, mettre \(N_a\) images dans l'ensemble d'apprentissage et \(N_v\) dans l'ensemble de validation. Attention, il ne faudra pas qu'une même image se trouve dans les deux ensembles.

Une fois cette partie codée, vous pouvez passer à la suite.

Entraînement du perceptron et illustration des résultats

Tout d'abord, assurez-vous que votre perceptron classe correctement (sans aucune erreur) l'ensemble d'entraînement. Ensuite, vous devrez réaliser au moins 3 éléments parmi la liste ci-dessous

  • En fixant \(N_v=1000\), et pour \(N_a\) pouvant varier de 1000 à 10000, illuster par un graphe la façon dont vous avez choisi \(N_a\).
  • En utilisant \(N_v=1000\) et \(N_a=10000\), utiliser maintenant un 3ème ensemble test de \(N_T=1000\) éléments. Chercher le meilleur taux d'apprentissage en utilisant l'ensemble de validation pour calculer le score pour chaque valeur choisie. Donner ensuite le score final sur l'ensemble de validation et sur l'ensemble de test.
  • Calculer la matrice de confusion pour \(N_a=5000\) et \(N_v=1000\) sur l'ensemble de validation. Commenter les classes les plus problématiques
  • Pour \(N_a=5000\) et \(N_v=1000\), illustrer quelle est l'allure moyenne des classes inférées par le perceptron sur l'ensemble de validation
  • Illustrer 5 images bien classées par le perceptron mais avec le plus mauvais score d'inférence.
  • Illustrer sur 5 classes, les images mal classées avec le pire score d'inférence. Précision : pour une classe donnée (disons les A), vous regarderez les exemples mal classés - donc par exemple les "vrais A" qui ne sont pas classés A par le percetron - et vous affichez l'image parmi celles-ci qui a le plus bas score pour la classe des A.
  • Entraîner un nouveau perceptron en utilisant cette fois-ci les 26 classes (les 26 majuscules). Tracer la courbe du nombre d'erreurs en fonction du nombre d'itérations à la fois sur l'ensemble d'apprentissage et d'entraînement et indiquer quel score vous obtenez.
Barème approximatif
  • rapport 3 pts
  • qualité du code 3 pts
  • justesse de l'algorihme 8 pts
  • résultats 6 pts

Ce barème n'est qu'indicatif puisque qu'entrera en compte la cohérence globale du rendu.


Définition de la matrice de confusion

Voici (finalement) la définition de la matrice de confusion.

  • Sur la diagonale \(i\), on compte le nombre d'éléments bien classés pour la classe \(i\).
  • Sur la ligne de la classe \(i\), vous compterez les éléments appartenant à la classe \(j\) (indice de colonne) et classés dans \(i\) par le perceptron. Ici on regarde donc pour quels classes le perceptron \(i\) se trompent.
  • Automatiquement : sur la colonne de la classe \(i\), on peut observer par quels perceptrons les éléments de la classe \(i\) sont classifiés.