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

Retour vers le tutoriel complet

Ressources

generateGrid.m Génère une grille régulière de point à partir de données 2D.

plotFrontiere.m Trace la frontière de décision.

tutoFront.m Explication sur un exemple simple du fonctionnement des deux méthodes précédentes.

Tracés en 3D, isocontour et fonctionnalités avancées

Soit une fonction de deux variables f(x_1,x_2). Si on cherche à apprendre f qui approxime des étiquettes y \in \{-1,1\}, on va s'intéresser de près à la frontière de décision: dans quelle partie de l'espace décide-t-on 1 et dans quelle partie décide-t-on -1...

Exemple de tracé:


Figure 1 Frontière de décision au sens des moindres carrés entre 2 classes gaussiennes.

Obtenir une telle courbe n'est pas trivial: voici la liste des étapes à suivre:

0. Soit un problème de classification binaire

Code du tutoriel joint;

 % entete sanitaire
 clear all;
 close all;

 % nb de points de la simulation
 N = 100;

 % generation de 2 classes gaussiennes de moyennes (2,2) et (-2,-2)
 x = [randn(N,2)+2; randn(N,2)-2];
 y = [ones(N,1); -ones(N,1)]; % etiquettes

   % affichage des donnees
   figure
   plot(x(y==1,1),x(y==1,2), 'r+'); hold on;
   plot(x(y==-1,1),x(y==-1,2), 'bo');
   print('data.png','-dpng');

1. Générer une grille de points maillant tout l'espace à décrire

La fonction generateGrid.m effectue cette opération pour vous: vous donnez x et la densité du maillage en argument.

Cette fonction permet de passer du problème de gauche au maillage de droite:

| Figure 2 Problème de classification binaire et grille associée.

Code associé:

 % construction d'une grille réguliere de point sur l'espace 2D
 ngrid = 10; % finesse de la grille
 [xgrid] = generateGrid(x, ngrid);

   % affichage de la grille
   figure
   plot(xgrid(:,1), xgrid(:,2), '+'); % on voit que les bornes sont les memes 
   print('grid.png','-dpng');         % que pour x: le maillage couvre tout 
                                      % l'esapce

3. Evaluer le modèle sur la grille

Sur les données étiquetées, un modèle est appris:

 % fonction de decision linéaire au sens des moindres carres
 w = (x'*x)\(x'*y);

Le modèle (ici linéaire) est ensuite appliqué sur les points de la grille:

 % application du modele sur la grille
 ypred = xgrid * w;

   % affichage de ypred
   figure
   plot3(xgrid(:,1), xgrid(:,2), ypred, '+'); hold on; % point en 3D
   view(20,20); % reglage du point de vue en 3D
   print('plot3.png','-dpng'); 

Figure 3 Evaluation du modèle sur les points de la grille.

La figure est en 3D: 2 dimensions x_1 et x_2 pour les données et une dimension z=\hat y pour l'évaluation du modèle.

4. Affichage(s) avancé(s)

Une fois dans cette configuration, plusieurs affichages sont possibles. Soit on relie les points ensemble pour en faire une surface:


Figure 4 Evaluation du modèle sur les points de la grille, affichage sous forme de surface.

Soit on s'intéresse seulement au moment où la surface croise le plan z=0 et on trace un isocontour d'équation f(x_1,x_2)=0


Figure 5 Evaluation du modèle sur les points de la grille, affichage de l'isocontour f(x_1,x_2)=0.

Code correspondant:

 % relier les points en une surface

  figure
  plotFrontiere(xgrid, ypred, 1); % le 1 correspond a l'option surface
  view(20,20); % reglage du point de vue en 3D
  print('surface.png','-dpng'); 

 % tracer la frontiere de décision: l'endroi ou la courbe croise le 0
  figure
  plot(x(y==1,1),x(y==1,2), 'r+'); hold on;
  plot(x(y==-1,1),x(y==-1,2), 'bo');
  plotFrontiere(xgrid, ypred); 
  view(20,20); % reglage du point de vue en 3D
  print('frontiere.png','-dpng'); 

(pas vraiment une) Application

On souhaite dans cet exercice tracer des courbes en 3D f(x,y) puis la dessiner dans la question.

On souhaite créer la fonction f(x,y) = x^2 + y^2, pour x \in [1,3] et y \in [-1,1]. Afin d'exploiter les vecteurs et matrices d'Octave, on discrétise cet espace en n'en sélectionnant que 5 valeurs par axe~:

 x =[  1.0000    1.5000    2.0000    2.5000    3.0000 ]; % définir l'axe des x
 y =[ -1.00000  -0.50000   0.00000   0.50000   1.00000]; % définir l'axe des y

 [xgrid, ygrid] = meshgrid(x, y); % création des combinaisons

Résultat :

 xgrid =                                         ygrid =
   1.0000   1.5000   2.0000   2.5000   3.0000     -1.00000  -1.00000  -1.00000  -1.00000  -1.00000
   1.0000   1.5000   2.0000   2.5000   3.0000     -0.50000  -0.50000  -0.50000  -0.50000  -0.50000
   1.0000   1.5000   2.0000   2.5000   3.0000      0.00000   0.00000   0.00000   0.00000   0.00000
   1.0000   1.5000   2.0000   2.5000   3.0000      0.50000   0.50000   0.50000   0.50000   0.50000
   1.0000   1.5000   2.0000   2.5000   3.0000      1.00000   1.00000   1.00000   1.00000   1.00000

Création de la fonction f:

 f = xgrid .* xgrid + ygrid .* ygrid;

Pour pouvoir tracer f en 3D, la variable f doit avoir les mêmes dimensions que xgrid et ygrid.

 surf(xgrid, ygrid, f);    % affiche la surface f
 contour(xgrid, ygrid, f); % affiche les courbes de niveau de f