Bonjour,

Voila, je vous expose la démarche que je veux entreprendre :

Mon but est de faire de la classification. Mais pas seulement ça, je veux aussi utiliser des méthodes de prétraitement et d'extraction des caractéristiques les plus pertinentes avant de faire de la classification. Parmi ces méthodes, je veux utiliser l'Analyse Discriminante Linéaire de Fisher.

J'ai une matrice d'entrainement, qui contient la base de données d'apprentissage (6x120). Cette matrice a un vecteur de classe qui lui est assigné (1x120).

Je veux appliquer une discrimination linéaire au sens de Fisher sur cette matrice d'apprentissage. Je veux donc obtenir sa matrice projeté en maximisant le rapport entre la covariance entre-classe et la covariance inter-classe (Sb/Sw).

Voici l'algorithme que j'ai programmé :
  1. J'extrais les classes de la matrice d'entrainement, j'obtiens 3 matrices correspondantes aux 3 classes. La matrice 1 (CLASSE1) de dimension 6x48, la matrice 2 (CLASSE2) de dimension 6x24, et la matrice 3 (CLASSE3) de dimension 6x48.
  2. Je calcul la moyenne correspondante à chaque classes, j'obtiens donc 3 moyennes (m1, m2 et m3).
  3. Je calcul la covariance intra-classe (Between class) Sw (dimension 6x6)
  4. Je calcul la covariance inter-classe (within class) Sb (dimension 6x6)
  5. Je calcul le rapport entre Sb et Sw
  6. Je calcul la matrice V des vecteurs propres du rapport entre Sb et Sw. La matrice V me permettra de calculer les données projetées.
  7. Je calcul les données projetées, en multipliant la transposé du vecteur V, par ma matrice Training. J'obtiens une matrice 6x120.
    (matrice projetée = V ' x Training)

Est-ce que cet algorithme est juste ? Est-ce que ma matrice projetée est bonne ? J'obtiens de très mauvais résultats lors de la classification.

Pour classifier, j'utilise ma matrice projetée comme base d'entrainement, mais, je ne peux le faire sans transformer mes échantillons de test dans le même repère que celui de la matrice d'entrainement.

Je fais donc :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
M=mean(Training');
centeredSample = bsxfun(@minus,Sample',M);
centeredSampleInLDAcoords = centeredSample*V;
disp('Classification KNN, Le vecteur classe corresppodant à Sample est ')
knnclassify(centeredSampleInLDAcoords,y',Target')
J'obtiens de très mauvais résultats lors de cette classification. Je crois que le problème peut survenir de deux choses :
  • Soit de mon code, qui m'a permis de calculer les matrices de covariances inter et intra classes.

  • ou bien, de l'étape final, consistant à projeter les données de test (Sample) dans l'espace où est représenté ma matrice y (dans l'espace optimal pour la discrimination de Fisher).

Pouvez vous m'aider s'il vous plait ?

Je vous remercie infiniment

Cordialement