Apprentissage supervisé (C++)
Introduction
Definition du problème
L'objet de ce TP est reconnaître des chiffres manuscripts par une classification via des SVM. L'idée, pour reconnaître un chiffre, est de construire une base d'exemple où l'on associe aux imagettes représentant ce chiffre l'étiquette 1, et où l'on associe aux autres imagettes l'étiquette -1. On réalisera, sur la base ainsi constituée, l'apprentissage d'une SVM de classification.
Prise en main
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.
Essayer de compiler l'exemple base-example.cc dans votre dossier de travail. Lisez ce fichier d'exemple pour comprendre comment on gère la base.
prompt> g++ -o base-example -Wall -ansi -O3 base-example.cc
prompt> ./base-example
	
Pour la SVM, nous travaillerons avec la bibliothèque gaml, qui permet d'exprimer les principes d'apprentissage automatique en C++. Pour les algorithmes de SVM, nous utiliserons la bibliothèque gaml-libsvm, qui est une légère encapsulation C++ de la libsvm.
Commencez par lire, comprendre, compiler et exécuter l'exemple 001 de gaml-libsvm.
prompt> g++ -o gaml-libsvm-example -Wall -ansi -O3 gaml-libsvm-example.cc `pkg-config --cflags --libs gaml-libsvm`
prompt> ./ml-libsvm-example 500
prompt> gnuplot -p clean-oracle.plot
prompt> gnuplot -p oracle.plot
prompt> gnuplot -p prediction.plot
	
La documentation des structures de données liées à la libsvm se trouve ici.
Voici une première ébauche de l'application des SVM à notre problème de reconnaissance de chiffres : svm-example.cc
Regardez les exemples de gaml pour calculer les risques (exemple overview et cross-validation).
Travail à réaliser
Construisez un programme, à base de SVM bi-classes, qui reconnaît un chiffre manuscript. Donnez-en une mesure de performance.
A l'aide des outils fournis par gaml, utilisez les outils classique de machine learning : courbes ROC, matrices de confusion, bootstrapping, ... inspirez-vous des exemples de gaml.
A l'aide du logiciel gimp, créez des imagettes avec votre écriture, et testez la reconnaissance.
Testez une SVM multi-classes, plutôt que d'opposer les classes en un contre tous.