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

Méthodes exploratoires Discussion :

Qualité d'une ACP


Sujet :

Méthodes exploratoires

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 27
    Points
    27
    Par défaut Qualité d'une ACP
    Bonjour,

    Je suis ennuyé parce que j'ai utilisé la fonction princomp sur Matlab pour faire une ACP et qu'ensuite j'ai décidé de regarder la qualité de cette ACP...

    Je pose ma matrice de départ X et SCORE la matrice des coordonnées des individus dans la nouvelle base. ET ensuite :
    C=diag(X*X'); %normes des individus de X
    B=diag(SCORE*SCORE'); %normes des individus de SCORE
    E=diag(X*SCORE'); %produit scalaire de X par score
    F=(E./sqrt(C)./sqrt(B)).^2; %cosinus carrés entre les individus de x et leurs projetés respectifs dans SCORE.

    Je m'attendais à quelques cos carrés élevés et bien non ! Tous inférieurs à 0.1 !!! Est ce donc une mauvaise méthode que de considérer l'angle entre les individus et leur projetés ??? Ou est ce que c'est l'étude ACP qui n'est pas adéquate ?

    Merci beaucoup

    -------------------------------------------------------------------------

    Je deviens fou! J'ais deux matrices n*p qui représentent n vecteurs pour la première et leurs n projections dans une autre base pour la seconde.

    Je voudrais trouver une matrice n*1 qui donne les n cosinus entre les vecteurs et leur projection.
    Pour l'instant j'as pensé a prendre la trace du produit de la première matrice par la transposée de la seconde (donc le produit scalire de chaque vecteur avec son vecteur projeté) mais ensuite il faut que je divise chaque valeur par le produit de la norme de chaque vecteur avec la norme de son vecteur projeté!

    Je suis persuadé qu'il existe plus simple, mais quoi!?

    Merci pour votre aide

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    salut,

    tu peux juste diviser les normes : cos(teta) = ||p(v)||/||v|| , avec p l'operateur projection.

    PS :
    si tu projete dans une autre 'base' qui est normée ( la base d'origine est normée aussi), tu dois avoir ||p(v)|| = ||v||. Si ton espace de projection est plus petit que l'espace où se trouve les v, ton calcul serviva à quelque chose .

    ++

  3. #3
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    tu es en quelle dimension ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    Je travaille sur l'automatisattion d'une analyse en composantes principales (ACP ou APC en englais). la dimension dépend donc de la matrice de départ.

    Afin d'avoir une idée de la qualité de la représentation de chaque point, je cherche l'angle entre chaque vecteur initial (réprésentant un point) et sa projection. Plus précisément le carré du cosinus de cet angle.

  5. #5
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Appelons A ta matrice n*p contenant des n vecteurs en dimension p.
    Appelons B ta matrice n*p contenant les projetés des n vecteurs en dimension p.

    la diagonale de C = A * transpose(A) te donne la norme carrée de chaque vecteur de A
    la diagonale de B = B * transpose(B) te donne la norme carrée de chaque vecteur de B
    la diagonale de E = A * transpose(B) te donne le produit scalaire entre les vecteurs de A et de B.

    comme cos(angle) = <u.v> / sqrt(<u.u>) / sqrt(<v.v>), tu peux obtenir ton résultat.

    Bon c'est la méthode brutale mais si c'est juste pour faire une vérification et si tu es sous matlab, c'est très facile à mettre en oeuvre.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    Merci corentin,

    je suis sous matlab donc effectivement ce sera rapide et facile a programmer.

  7. #7
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Tout d'abord, pourquoi prend-tu le carré du cosinus ? cos(x) étant inférieur à 1, on aura cos²(x) <= cos(x).

    Mais bon, dans le cas d'une ACP, c'est plutôt la valeur des valeur propres de la matrice de covariance qu'il faut regarder. Par exemple, si les deux premières sont très grandes par rapport aux autres, alors une représentation basée sur les deux premiers axes donnés par l'ACP contiendra pratiquement toute l'information

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    Bon,

    je relance la discution parce que je ne suis pas convaincu. Je n'obtiens que des cosinus carrés inférieurs à 0.1.

    J'ai effectué une analyse en composantes principales sur une matrice n*p.
    J'ai obtenu une matrice n*p (en réalité n*(p-1) puisque la dernière colonne est nulle) de coordonnées dans une nouvelle base orthonormée.

    Afin d'exprimer la qualité de la réprésentation je voudrais le cosinus entre chaque variable et sa projection. Etant donné que chaque matrices se rapporte à une base différente et sont normées différemment, comment faire?

    Mon explication est un peu brouillon, mais je sais pas comment expliquer autrement.

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par nonoprig Voir le message
    Afin d'exprimer la qualité de la réprésentation je voudrais le cosinus entre chaque variable et sa projection.
    Comme dit précédemment, c'est le rapport des normes.

    Etant donné que chaque matrices se rapporte à une base différente et sont normées différemment, comment faire?
    "chaque matrice" ? "base différente" ?

    Une ACP correspond a une base, donc je ne vois pas pourquoi tu parles de bases differentes.

    Point A:
    -> coordonnées dans la base d'origine: (a0,b0,c0,...,z0)
    -> coordonnées dans la base ACP: (a1,b1,c1,...,z1)

    Projection de A sur les 2 premiers vecteurs de la base ACP:
    -> coordonnées dans la base ACP: (a1,b1,0,0,...)

    (Cosinus angle)² = (rapport des normes)² = (a1²+b1²) / (a1²+b1²+...+z1²)

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    La valeur des valeurs propres de la matrice de covariance est un bon indicateur de la qualité d'information des axes donnés par l'ACP.

    Seulement, afin de mieux comprendre les observations initiales, tu peux aussi t'interresser à la "contribution" d'une observation à l'axe n°k.
    Ainsi, si l'observation i contribue à 80% de l'information donnée par l'axe k, qui lui même contribue (d'après la valeur propre k de la matrice de covariance) à 45% de l'information, on pourra dire que l'observation i est responsable de 0.8*0.45=0.36=36% de la variance de l'information.

    Le cosinus (carré ou pas) entre une observation et sa projection était censé donner une indication de la qualité de sa représentation dans la nouvelle base.
    Ce n'est en fait pas très nécessaire, car si je me réduis à 3 ou 4 axes, avec la contribution de l'individu à ces axes, je saurais si il a du sens dans cette nouvelle base.
    Ma question est donc: comment calculer la contribution d'une observation à l'axe k???

  11. #11
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    je dois avouer que j'ai un peu de mal à comprendre ce que tu veux faire.

    Une ACP permet de passer d'une base en dimension n à une autre base d'une plus petite dimension. Le critère de construction de cette nouvelle base est d'essayer de conserver la variance d'origine avec un minimum d'axe de projection. Le critère est donc la variance. Pour calculer une variance, il faut plusieurs données. Pourquoi s'intéresser à la contribution d'une seule observation au calcul de la variance ? ça n'a pas vraiment de sens pour moi. A partir du moment où tu as les valeurs propres, tu as ton indication de la qualité de ton ACP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. controler la qualité d'une clé SSH ?
    Par byloute dans le forum Sécurité
    Réponses: 1
    Dernier message: 16/07/2007, 14h49
  2. Quantifier la qualité d'une image après compression JPEG
    Par louitos dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 06/07/2007, 10h42
  3. [Qualité]Ecrire une documentation.
    Par berceker united dans le forum Qualité
    Réponses: 4
    Dernier message: 23/08/2006, 12h28
  4. [JAI] Diminuer la qualité d'une image PNG
    Par supermanu dans le forum 2D
    Réponses: 2
    Dernier message: 11/04/2006, 12h49
  5. importance de la qualité d'une carte réseau
    Par GMI3 dans le forum Hardware
    Réponses: 5
    Dernier message: 31/01/2005, 00h46

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