Apprentissage non-supervisé (C++)
Introduction
Definition du problème
Le principe du TP est de construire une carte auto-organisatrice de Kohonen permettant de représenter les différentes formes prototypiques des caractères de la base. On se dotera d'outils pour visualiser le processus d'auto-organisation. Une fois la carte organisée, on la bloquera, puis on identifiera à la main le chiffre correspondant à chaque case. Lorsqu'on présente un nouveau chiffre à la carte, on l'identifie à l'étiquette du prototype le plus proche.
Mise en place
Créez un dossier de travail, et placez-y la base de chiffres. Afin de manipuler cette base facilement, téléchargez également le fichier Base.h dans votre dossier de travail. Il est inutile de chercher à en comprendre le contenu.
Inspirez-vous de l'exemple basic-example.cc, que vous pouvez compiler, puis exécuter, comme suit:
prompt> g++ -o basic-example -Wall -ansi -O3 basic-example.cc
prompt> ./basic-example
K-Means
Implémentez l'algorithme k-means (la version on-line, pas LBG). Pour structurer votre programmation, partez de l'exemple précédent, mais avant le main, ajoutez les fonctions suivantes:
void learnProto(double alpha, Prototypes::imagette& w, const uci::Database::imagette& xi)     {...}
double distanceProto(const Prototypes::imagette& w, const uci::Database::imagette& xi)        {...}
void winnerProto(const Prototypes& protos, const uci::Database::imagette& xi, int& i, int& j) {...}
Ensuite, dans le main, implémentez k-means en vous servant de ces fonctions. Vous pourrez sauvegarder les différents états intermédiaires de la carte de prototype dans des fichiers kmeans-000000.ppm, kmeans-000001.ppm, kmeans-000002.ppm,... Pour faire un film a partir de ces images :
prompt> avconv -i kmean-%06d.ppm -b:v 1M kmean.avi
Qu'observez-vous ?
Cartes de Kohonen
Première implémentation
Complétez le code précédent pour implementer une carte de Kohonen. Il vous faudra rajouter la fonction suivante :
double winningRate(int i_winner, int j_winner, int i, int j) {...}
	
Vous pourrez de même réaliser un film montrant l'évolution de la carte.
Adaptation de la distance
En quoi la distance euclidienne est-elle inadaptée ? Proposez une nouvelle distance.
Reconnaissance de chiffres
Ecrivez une procedure de sauvegarde des prototypes. Associez visuellement un nombre à chaque prototype. Construisez un classifier qui se base sur cette association. Mesurez son risque empirique sur la base.