Le but de ce TP est de mettre en oeuvre le classifieur Bayesien Naif sur les données MNIST. Pour se familiariser avec ces données voir cette page. Elles sont également accessible en lecture et en local:

/partage/public/allauzen

Ce corpus rassemble des images (observations) de chiffres isolés et manuscrits ainsi que les classes associées (les labels ou les réponses attendues). Il s'agit donc d'un problème de classification à 10 classes (de 0 à 9). L'objectif est d'assigner le bon chiffre à une image.

Chargement des données

In [4]:
import cPickle, gzip, numpy
 
# Load the dataset
f = gzip.open('/Users/allauzen/data/mnist/mnist.pkl.gz', 'rb')
train_set, valid_set, test_set = cPickle.load(f)
f.close()
# exemple: 
im = train_set[0][0] # the first image
label = train_set[1][0] # its label

Bayesien Naif (continu)

Les observations sont de nature continue. Chaque image contient 784 pixels dont la valeur est réelle et normalisée entre 0 et 1. On pourrait binariser ce type de données, mais ici nous allons les modéliser ainsi en utilisant des gaussiennes.

Une image est un vecteur de caractéristiques contenant 784 composantes. Partons de cette simple représentation. L'hypothèse naïve implique que chaque composante est indépendante des autres. Dans le cas présent, chaque pixel est donc modélisé par une gaussienne. La matrice de covariance est donc diagonale.

TODO

Implémenter le Bayesien naïf gaussien:

  • Calcul des paramètres à partir des données d'apprentissage
  • Inférence sur les données de test
  • Calcul du taux d'erreur
  • Tracer les images "moyennes" pour chaque classe
In [ ]: