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 perceptron

Créer un jeu de données

Utiliser dataset avec les bons paramètres:

 napp = 100;
 ntest = 1000;
 bruit = 0.35;
 [xapp,yapp,xtest,ytest] = dataset('gaussian', napp, ntest, bruit);

Afficher ensuite le jeu de données pour visualier le travail à réaliser:

 figure
 plot(xapp(yapp==1,1), xapp(yapp==1,2), '+');
 hold on;
 plot(xapp(yapp==-1,1), xapp(yapp==-1,2), 'ro');

Coder l'algorithme du perceptron

 Entrées: xapp, yapp, epsilon, nIter
 Sortie: w

Vous pourrez prendre 0.01 pour epsilon. nIter doit être suffisamment grand pour voir plusieurs fois toutes les données.

Evaluer les perfromances de l'algorithme en apprentissage et en test

Tracer la frontière de décision

lien tutoriel

En ajoutant un argument, tracer également la fonction de décision du perceptron.

Caractériser la solution du perceptron

Tracer l'évolution de la frontière de décision au cours des itérations. Construire un xgrid avant la boucle. Dans la boucle, à l'intérieur du bloc de mise à jour des w, faire:

 plot(xapp(yapp==1,1), xapp(yapp==1,2), '+');
 hold on;
 plot(xapp(yapp==-1,1), xapp(yapp==-1,2), 'ro');
 ygrid = % A COMPLETER: evaluation des points de xgrid avec le modèle
 plotFrontiere(xgrid, ygrid);
 hold off; % pour que l'itération suivante écrase la précédente
 drawnow % pour forcer l'affichage maintenant
 sleep(0.1);

D'autres caractérisation sont possibles:

  • tracer l'évolution des taux de bonnes classifications au cours des itérations
  • tracer l'évolution des coefficients w au cours des itérations
  • regarder le comportement du perceptron avec d'autres initialisations (par exemple un vecteur aléatoire ou un vecteur de 1)

Passage à USPS et au multi-classes

Le but est de comparer le perceptron avec l'approche bayesienne de la semaine passée.

Attention, par défaut le perceptron est un algorithme bi-classes... Il faut apprendre plusieurs classifieurs (autant que le nombre de classes) qui distinguent chacun une classe du reste du monde. La classe intéressante sera notée 1, le reste du monde -1.

L'inférence consiste à faire passer un échantillon dans tous les classifieurs avec un argmax.

Proposition de syntaxe:

 for c=classes % iteration sur toutes les classes
   index = find(yapp == c);
   ytmp = -ones(napp,1);
   ytmp(index) = 1;