IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

analyse en composante principale


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut analyse en composante principale
    Bonsoir,
    J'ai besoin d'utiliser l'ACP sur un ensemble d'images après faire la projection des composants (en matlab)
    J'ai extrait les nouvelles composantes mais comment les projeter par exemple juste la 1ère composante et 2ème
    voici le code pour le moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    moy = mean(matFace);% matface matrice d'images
    [nligne ncol] =size(matFace);
    vunit=linspace(1,1,nligne)';
    Moy=matFace-vunit*moy;
    ect=std(matFace);
    ecar=diag(ect)^-1 ;
    %%% matrice centrée réduite
    Xcr=Moy*ecar;
    %%%%matrice de covariance
    Cov=(Xcr'*Xcr)/nligne;
    [vec val] = eig(Cov) ;%vecteur et valeur propre
    col=diag(val);
    U=[col vec];
    U=flipud(U);
    U=U(:,2:ncol+1);
     
    CP=Xcr*U;
    for i=1:ncol
        ele=CP(:,i);
        elt=reshape(ele,30,20);
        figure
        imshow(elt),
    end

  2. #2
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Pourquoi n'utilises-tu pas la fonction princomp() ? http://www.mathworks.com/help/toolbo.../princomp.html

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Pourquoi n'utilises-tu pas la fonction princomp() ? http://www.mathworks.com/help/toolbo.../princomp.html
    Tout le monde ne possède pas la toolbox statistic et l'ACP n'est pas très compliquée à coder avec les outils de base de Matlab.


    @sofajava : je ne comprends pas bien ce que tu cherches à faire avec ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    U=[col vec];
    U=flipud(U);
    U=U(:,2:ncol+1);
    Il suffit de réordonner dans l'ordre décroissant les valeurs propres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [val,idx] = sort(diag(val),'descend');
    vec = vec(:,idx);
     
    % Projection :
    CP=Xcr*vec;
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,
    merci pour vos réponses:
    @Frank: j'ai déjà la toolbox mais il faut la programmer
    @magelan: oui c'est la même chose, juste ajouter vecteur propre et après les ordonnées j'ai pas le problème ici mais les problèmes que j'ai sont:
    en premier lieu comment donner un pourcentage pour juste travailler avec les premiers vecteurs (grands) est-ce qu'il y a une formule ou non ?
    Le 2ème problème si j'ai une nouvelle image comment la projeter avec les autres images est-ce que je dois refaire le même processus ou il faut un changement quelque part?
    Merci d'avance.

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Sur la matrice des valeurs propres val correctement ordonnées, pour avoir le pourcentage cumulé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cumsum(diag(val)) / sum(diag(val))
    le 2 eme pb si j'ai une image nouveau comment la projeté avec les autres images est ce que je refaire la mm processus ou il faut un changement kelle que part et mercii d'avance
    Tout dépend ce que tu veux faire, si tu veux projeter cette nouvelle image il faut multiplier par les vecteurs propres trouvés précédemment, si tu veux utiliser cette image dans le calcul de tes composantes principales, il faut refaire le calcul avec cette nouvelle donnée.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Merci mais comment par exemple juste utiliser les 5 premiers val d'après le pourcentage ?
    Pour l'image nouveau il faut calculer la composant principale...
    C'est une question bête, mais comment puis-je dessiner les composantes 1 et 2?
    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s1=CP(:,1);
    s2=CP(:,2);
    figure;plot(s1,'*',s2,'+')
    Mais ça ne marche pas.
    Je voudrais représenter la 1ère composante avec * et la 2ème avec +.

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par safojava Voir le message
    Merci mais comment par exemple juste utiliser les 5 premiers val d'après le pourcentage ?
    Il te suffit de conserver uniquement les 5 premières composantes de ton tableau contenant les projections. Avec ta notation :
    s1a5=CP(:,1:5);

    Citation Envoyé par safojava Voir le message
    C'est une question bête, mais comment puis-je dessiner les composantes 1 et 2?
    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s1=CP(:,1);
    s2=CP(:,2);
    figure;plot(s1,'*',s2,'+')
    Mais ça ne marche pas.
    Je voudrais représenter la 1ère composante avec * et la 2ème avec +.
    Tu veux les représenter sur un axe 1D? Une solution rapide est de mettre les ordonnées à 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(s1,zeros(size(s1)),'*',s2,zeros(size(s2)),'+')
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Merci c'est très gentil.
    Je veux essayer avec la première solution, mais pour dessiner les composants en 2D pour voir la dispersion des variables.

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je n'ai pas compris ce que tu a écrits...

    Habituelement, on trace la deuxième composante en fonction de la première (ou la troisième en fonction de la premier ou la troisième en fonction de la deuxième, etc ou 3 composante sur un graphe 3D) avec plot3:
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  10. #10
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    okk moi je cherche par exemple de faire la différence entre par exemple le composant 1 et 2 de faire + et * s'il est possible

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Désole je ne vois pas de quoi tu veux parler.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  12. #12
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    d'accord, pas grave, peut être c'est mon problème j'ai pas bien compris la représentation des composants 1 et 2 , on représente la composante par rapport a l'autre ou on présente les 2 composants?

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Essaie de faire un effort sur la mise en forme de tes réponses, le langage sms, ça ne donne pas envie de te lire et ça n'aide pas du tout à te comprendre...

    Tout est possible mais ce qui se fait généralement, c'est de représenter en 2D avec la 1ere en abscisse, et la 2eme composante en ordonnée, et d'attribuer des marqueurs à tes différentes classes d'images par exemple (si le but est bien de trouver les composantes les plus discriminantes par rapport à différentes classes d'image).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  14. #14
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    ok merci pour tout

Discussions similaires

  1. Analyse en composantes principales en Java
    Par jmini dans le forum Langage
    Réponses: 4
    Dernier message: 01/12/2014, 17h03
  2. analyse par composante principale
    Par takfa2008 dans le forum Méthodes exploratoires
    Réponses: 4
    Dernier message: 30/03/2009, 13h58
  3. [Débutante] Analyse en composantes principales
    Par cixidetroy dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/06/2008, 14h33
  4. Analyse en composantes principales
    Par afnane dans le forum Méthodes exploratoires
    Réponses: 1
    Dernier message: 12/06/2008, 15h25
  5. Analyse en composante principale
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/03/2007, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo