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 Régression 2

Optimisation par gradient

Soit un problème avec des données (x_i,y_i)_{i=1,\ldots,N}, une fonction de décision/prédiction paramétrée par un vecteur w et une fonction de cout à optimiser C(w). Notre but est de trouver les paramètres w^\star minimisant la fonction de coût:

w^\star = \arg\min_w C(w)

l'algorithme de la descente de gradient est le suivant (rappel):

  1. w_0 \leftarrow init par exemple : 0
  2. boucle
    1. w_{t+1} \leftarrow w_{t} - \epsilon \nabla_w C(w)

Plusieurs critères d'arrêt sont envisageables: nombre d'itérations, plus de mouvement sur w, norme de \nabla_w C(w) suffisamment petite...

Q1 : programmer cette méthode et comparer les résultats avec la solution analytique

Visualiser la solution obtenue:

  % soit x et y et une solution (a,b)
  figure
  plot(x,y,'b+');   % affichage des points
  hold on;          % ne pas écraser l'affichage précédent 
  yhat = a*x+b;
  plot(x,yhat,'r'); % sortie du modèle

NB: il est possible de visualiser l'évolution du modèle au cours des itérations du gradient

  % dans la boucle du gradient, en notant (at,bt) la solution courante et avec une figure déjà ouverte
  hold off % pour que l'affichage écrase la figure précédente
  plot(x,y,'b+');   % affichage des points
  hold on;          % ne pas écraser l'affichage précédent 
  plot(x,at*x+bt,'r');
  drawnow           % forcer l'affichage maintenant 
  pause(1);         % 1 seconde de pause pour laisser le temps de voir qqch

Q2 : Dans le cas de la régression 1D, il n'y a que deux coefficients (a,b) = (w_1,w_2). Dans l'espace de ces paramètres, tracer l'évolution de la solution au fil des itérations. Vous placerez le point correspondant à la solution analytique pour analyser la qualité de la solution obtenue

Q3 : Etudier la qualité de la solution en fonction de \epsilon. Vous sauverez 3 images correspondant aux solutions \epsilon bon, trop petit ou trop grand.

Q4 : Afin d'encore mieux comprendre ce qui se passe, je vous propose d'ajouter un élément d'affichage: la fonction coût. Pour l'instant, la solution analytique nous donne le minimum mais on peut en fait dessiner cette fonction. Le processus (non trivial) est décrit ci-dessous:

  1. Génération d'un ensemble de couple (a_j,b_j)_{j=1,\ldots,G} maillant l'ensemble de l'espace
  2. Evaluation du coût pour tous ces couples
  3. Extraction et affichage des isocontours de coût pour visualiser C

Eléments de code pour l'implémentation:

  % génération des couples
  %- plage des pour a
  a = -2:0.1:5;
  %- plage des pour b
  b = -4:0.1:10;
  %- génération des couples: fonction meshgrid
  [w1,w2]=meshgrid(a,b); % toutes les combinaisons sont générées

  % Evaluation du cout pour tous les couples
  ... % A FAIRE après avoir noté la forme des matrices w1,w2
      % A stocker dans une matrice C de même dimension que w1 et w2

  % affichage
  contour(w1,w2,C);

On cherche un résultat de la forme:

Régression multiple (béton)

Q1 : Comprendre rapidement comment on passe au cas multidimensionnel, quelle est la forme de la solution (sous forme littérale puis vectorielle) et quelles sont les dimensions du gradient.

Nous recommençons à travailler avec la solution analytique ici:

  w = (X'*X) \ (X'*Y);

Q2 : Sur les données bétons:

donneesConcrete.dat (la variable à prédire est la dernière colonne)

Q2.1 : Construire un modèle de régression, évaluer l'erreur au sens des moindres carrés

Q2.2 : Afficher graphiquement Y et \hat Y pour évaluer grossièrement la qualité du modèle

Q2.3 : Comme pour la roulette, nous sommes en train de tricher en évaluant notre modèle sur les données qui ont servi pour l'apprentissage... Afin d'éviter le problème, séparer les données en 3 morceaux à l'aide du script ci-dessous, réaliser l'apprentissage sur 2 morceaux et le test sur le troisième. Conclure.

Script Separation Données: crossvalReg.m

Régression multiple (vin)

Q1 : Construire un modèle de régression

Q2 : Evaluer ce modèle...

Q2.1 : au sens des moindres carrés en apprentissage et en test comme dans l'exercice précédent

Q2.2 : en erreur de notation

Q2.3 : en erreur de notation à 0.5 point près (une erreur <0.5 n'en est plus une)

Q3 : Modèle de classification.

Q3.1 : Construire un modèle de regression linéaire par note

Q3.2 : En faisant l'hypothèse d'un bruit gaussien, évaluer la vraisemblance de chaque donnée vis à vis des différents modèles pour affecter chaque vin à une classe

Q3.3 : Evaluer les performances du modèle

Q3.4 : Ajouter un a priori dans le modèle basé sur la distribution des notes et effectuer l'affectation au sens du MAP.

Optimisation par gradient stochastique

(suite du premier exercice)

Les algorithmes de gradient sont souvent utilisés pour faire face à de grandes masses de données... Or le calcul du gradient coute cher. Afin de palier ce problème, une variante de l'algorithme traite les données une par une pour aboutir (asymptotiquement) au même résultat. L'algorithme est le suivant:

  1. w_0 \leftarrow init par exemple : 0
  2. boucle
    1. tirer aléatoirement un couple (x_i,y_i) dans la base
    2. w_{t+1} \leftarrow w_{t} - \epsilon \nabla_w C_i(w)

C_i(w) est le coût pour l'élément i seulement.

Reprendre les questions de l'exercice 1 avec ce nouvel algorithme