Teaching - RFIDEC


RFIDEC

Examen de milieu de semestre:

Voir la page de C. Gonzales:

http://webia.lip6.fr/~gonzales/teaching/rfidec/index.php

Examen de fin de semestre:

  • Droit aux notes de cours et aux slides
  • Le programme commence aux cours de P. Gallinari.
  • Les slides sont sur la page de P. Gallinari ainsi que l'exam corrigé de l'an dernier.

http://www-connex.lip6.fr/~gallinar/Enseignement/Enseignement.html

TME Bayes

Exercice 1: classification de chiffres manuscrits

Le but de l'exercice est de construire un système de classification automatique de chiffre (en suivant l'exercice 14) et d'évaluer ses performances. Quelques astuces sont données dans la suite pour faciliter votre implémentation.

Données chiffres manuscrits: usps.zip

Code de chargement:

load('usps_napp10.dat'); % pas de data= car le nom des variables est codé dans le fichier
 % creation de xapp, yapp, xtest, ytest: à vous de vérifier les dimensions

Compréhension des données: un chiffre = une ligne = 256 caractéristiques = codage d'une image 16x16 pixels

Affichage d'une image:

% pour afficher un chiffre
index = 3; % arbitraire: je vais visualiser le 3eme chiffre de la base
ch = reshape(xapp(index,:),16,16)'; % remise en carre de l'image
figure
subplot(1,2,1); % division de la fenêtre en 2 pour affichage ultérieur
imagesc(ch); % affichage
colormap('gray'); % detail esthétique

Binarisation

Problème: les données ne sont pas binaires (elles sont entre 0 et 2 quand on regarde bien) !!! => binarisation

>> xapp(index,:)
 0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   1.21900   1.78700   0.66700   0.01900   ...

Proposition pour binariser:

% binarisation
scale = max(max(xapp));
xapp = round(xapp/scale);
xtest = round(xtest/scale);

% verification
ch = reshape(xapp(index,:),16,16)'; % remise en carre de l'image
subplot(1,2,2); % division en 2 pour affichage utlérieur
imagesc(ch); % affichage

Apprentissage du modèle

Calcul des coefficients mu pour les classes (4 lignes de code dans la correction)

Application des modèles sur les données d'apprentissage et de test

Calcul des p(x|\mu) = \Pi_i \mu_i^{x_i} (1-\mu_i)^{1-x_i} ... Mais plein de problèmes

1) précision machine d'une multiplication de 256 termes... => on passe au log

\log(p(x|\mu)) = \sum_i x_i \log(\mu_i) + (1-x_i)\log(1-\mu_i)

2) log(0) => inf ou Nan... il faut être sûr que les mu sont >0 (et que les 1-mu le sont aussi)

A vous de jouer avec les min et les max pour avoir des valeurs supérieures à 1e-5

3) une fois les \log(p(x|\mu^k)) calculés, il faut trouver les classes associées:

si papp est une matrice de taille napp x 10 où toutes les probabilités sont stockées, on récupère l'indice de la case où se trouve le max avec la commande suivante:

[tmp,yappHat] = max(papp,[], 2);

Calcul des performances en apprentissage et en test

Exercice en 2D et tracé de frontière de décision (= ex 17 simplifié)

Génération de données gaussienne

Générer deux classes de données gaussienne 2D centrées en (2,2) et (-2,-2) et auront un écart type \sigma. Ces deux classes de données seront stockées dans des matrices X1 et X2.

Tracer les deux classes de données pour vérifier que ça marche:

figure
plot(X1(:,1), X1(:,2),'r+');
hold on
plot(X2(:,1), X2(:,2),'bx');

Apprentissage des modèles

En reprenant le cadre classique de l'apprentissage bayesien, apprendre les paramètres de deux modèles gaussien en dimensions multiples au sens du maximum de vraisemblance (cf lien).

Tracer la frontière de décision

Utiliser le tutoriel disponible ici

Variation du nombre d'échantillon et MAP

Reproduction de l'exercice corrigé en TD.

1) Faire varier le nombre de points dans la classe 2, vérifier que la frontière au sens du MV ne bouge pas

2) Apprendre un modèle MAP en prenant comme apriori la proportion de points dans chaque classe

3) Vérifier que la frontière de décision bouge lorsque l'effectif de la classe 2 est modifié

Exercice 19: naive bayes