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 :

Analyse en composante principale (ACP ou PCA)


Sujet :

Méthodes exploratoires

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Analyse en composante principale (ACP ou PCA)
    Bonjour tous le monde,

    Avant d'envoyer ce message j'ai vu qu'il y avait pas mal de discussion sur ce sujet mais je n'ai pas trouvé une réponse qui me satisfaisait.

    Je vous explique mon problème:

    J'ai un certain nombre de secteur économique n, et un nombre d entreprise m
    chaque entreprise peut se projeter sur ces n secteur (la somme des poids sur chaque secteur pour une entreprise donnée doit être bien évidement 100%)

    avec ces données je constitue une matrice (m,n).

    Problème

    les n secteurs peuvent être corrélé entre eux, je voudrai donc créer n' secteurs ficitifs décorrélé sur lesquelles je pourrai projeter les m entreprises. pour cela la méthode à utiliser est l'ACP, j'ai fait pas mal de recherche et j'ai trouvé des code en C++ /java, mais soit ils étaient trop compliqué soit je n'arrivai pas à les compiler correctement.

    Je voudrais donc savoir si quelqu un à déja rencontré ce problème ou si quelqu un a une solution simple à proposer, si possible en VBA sinon en C++ et je pourrai après utiliser Reflector pour faire une conversion à VBA.

    Merci à tous

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    je ne suis pas certain que l'ACP soit effectivement la méthode adaptée au problème. Elle va réduire les dimensions sans tenir compte des corrélations...
    Ne faudrait il pas mieux faire un test de corrélation entre les variables et ensuite faire une ACP sur les groupes corrélés ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse


    Je suis tout à fait d accord avec ce que tu dis, cependant je suppose dans un premier cas que je connais la corrélation entre les n secteurs, c'est pour cette raison que je voulais utiliser une ACP directement.

    Pour être plus clair:

    Au début j'ai k secteur complétement décorrélé et m entreprise, à partir de ces k secteurs je crée n secteurs corrélé dont je connais les différentes corrélation ( chaque secteur n sera une combinaison linéaire de k' secteur parmis k)
    ayant ces n secteur, je voudrai effetuer une ACP.

    Vous allez me dire : si j avais k secteur décorrélé alors pourquoi obtenir n secteur corrélé pour faire une acp et réobtenir n' secteur décorrélé

    Enfait mon cas est assez particulier, puisque j utilise cela sur un portefeuille d'ABS ( si ça vous parle) et k secteur fourni, et j'aimerai à partir des actif sous jacent de l'ABS obtenir un secteur fictif qui sera la combinaison linéaire des secteurs des sous jacents qui seront à priori connu.
    Ensuite j aurai obtenu les n secteur fictif puis j essaie d appliquer l'ACP.

    J'espère que je ne vous ai pas embrouillé avec tous ces détailles et que c'est compréhensible.

    Et c'est la où j'aimerai bien utiliser l'ACP mais je ne trouve pas un bon code sur internet en VBA ou C++.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il me semble que ce que tu fais s'apparente davantage à une analyse factorielle qu'à une ACP, mais bon...

    A priori, tu dois pouvoir programmer tout cela directement (en tous cas, tu vas trouver tous les algos qu'il te faut dans Numerical Recipes ou des références de ce type).

    Le principe de la méthode est le suivant :

    1- Tu prends ta matrice M donnant les poids des entreprises pas secteurs
    2- Tu la multiplies par sa transposée (tu as donc à ce stade une matrice de variance covariance),
    3- Tu diagonalises cette matrice, tu vas donc obtenir ses valeurs propres, et une matrice de vecteurs propres orthgonaux, qui permettent de passer de ta base de départ (les secteurs d'origine), dans ta nouvelle base (les secteurs "factoriels" décorrélés)
    4- Tu élimines les axes correspondant aux valeurs propres nulles ou très proches de zéro.

    La matrice de passage ainsi obtenue te permet (à une multiplication par la matrice de départ ou sa transposée près) de passer d'un représentation à l'autre.

    Francois

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Bonjour,

    je ne suis pas certain que l'ACP soit effectivement la méthode adaptée au problème. Elle va réduire les dimensions sans tenir compte des corrélations...
    Ne faudrait il pas mieux faire un test de corrélation entre les variables et ensuite faire une ACP sur les groupes corrélés ?
    Justement, la matrice d'une ACP est basée sur les corrélations. L'objectif est de trouver un sous-espace linéaire qui maximise la variance des données, mais dans le process, les valeurs fortement corrélées doivent normalement se regrouper entre elles. Effectivement, une analyse factorielle peut être plus efficace, mais que si on a déjà les groupes à l'origine. Si on ne les a pas, c'est ACP puis un outil de classification non supervisé (tel que K-Means), mais bon, tout ce qui est linéaire pour la réduction de dimension est souvent non adapté.

    Je te conseille de tester avant la méthode en Matlab ou Python, car programmer une ACP, c'est très compliqué, et en VBA

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Effectivement, une analyse factorielle peut être plus efficace, mais que si on a déjà les groupes à l'origine. Si on ne les a pas, c'est ACP puis un outil de classification non supervisé (tel que K-Means), mais bon, tout ce qui est linéaire pour la réduction de dimension est souvent non adapté.
    T'es sur que tu ne confonds pas AFC et analyse discriminante, là?

    Ici, l'AFC va faire comme une ACP utilisant une distance du Chi-Deux. On va en fait diagonaliser une matrice de variance covariance et transformer le tableau initial (précisément ses colonnes) en une matrice dans l'espace factoriel réduit aux n' premières coordonnées. On retrouve ainsi n' variables décorrélées, qui sont les meilleures au sens de la distance du chi-deux.

    Je dis que c'est une AFC parce que cette idée de représenter en "moins de dimensions" les points d'un tableau statistique, c'est exactement le "programme" de l'AFC (là où l'ACP fait une analyse plus compliquée).

    Et tu n'as absolument pas besoin de K means, les axes factoriels sont les variables que tu cherches. Les seules différences avec l'AFC classique, c'est qu'on va prendre plus de 2 ou 3 axes, qu'on ne va pas faire de jolis dessins, et qu'on ne va pas utiliser (dans ces dessins qu'on ne fera pas) la propriété de dualité de cette analyse (qui fait que l'analyse ligne est superposable à l'analyse colonnes)

    Pour la réalisation en C++ (ou en VBA), un algos de valeurs propres d'une matrice symétrique est tout ce qu'il faut. C'est pas bien méchant... Pour vraiment bien faire, il faut faire, au lieu d'une diagonalisation de la matrice de variance covariance, une SVD de la matrice d'origine. Il y a du code pour faire cela dans Netlib, et chez Numerical Recipes (il y a une version en ligne de la seconde édition sur le web, mais c'est de toutes facons un livre à posséder)

    En termes de références stats, je recommande le Volle (Analyse des données, chez Economica), plus facile à lire que les Benzecri, Saporta et consorts, à mon avis...
    Dernière modification par Invité ; 19/07/2009 à 18h41.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par fcharton Voir le message
    T'es sur que tu ne confonds pas AFC et analyse discriminante, là?
    Peut-être, de toute manière, ces outils sont obsolètes sur les jeux de données non linéaires.
    Citation Envoyé par fcharton Voir le message
    Ici, l'AFC va faire comme une ACP utilisant une distance du Chi-Deux. On va en fait diagonaliser une matrice de variance covariance et transformer le tableau initial (précisément ses colonnes) en une matrice dans l'espace factoriel réduit aux n' premières coordonnées. On retrouve ainsi n' variables décorrélées, qui sont les meilleures au sens de la distance du chi-deux.

    Je dis que c'est une AFC parce que cette idée de représenter en "moins de dimensions" les points d'un tableau statistique, c'est exactement le "programme" de l'AFC (là où l'ACP fait une analyse plus compliquée).
    C'est bizarrement aussi ce que fait l'ACP. Dingue, non ? Et non, ce n'est pas plus compliqué comme analyze.
    Citation Envoyé par fcharton Voir le message
    Et tu n'as absolument pas besoin de K means, les axes factoriels sont les variables que tu cherches. Les seules différences avec l'AFC classique, c'est qu'on va prendre plus de 2 ou 3 axes, qu'on ne va pas faire de jolis dessins, et qu'on ne va pas utiliser (dans ces dessins qu'on ne fera pas) la propriété de dualité de cette analyse (qui fait que l'analyse ligne est superposable à l'analyse colonnes)
    Tout dépend de ce que tu cherches à faire (et n'essaie pas de me faire croire que je me trompe dans ce que je dis, ma thèse a porté sur ce domaine). Je parle des K-means pour faire une classification non supervisée. C'est l'outil de base et optimal dans des espaces comme celui extrait par un Laplacien. Faire une analyse linéaire quand on sait que ses données ne sont pas linéaires...
    Citation Envoyé par fcharton Voir le message
    Pour la réalisation en C++ (ou en VBA), un algos de valeurs propres d'une matrice symétrique est tout ce qu'il faut. C'est pas bien méchant... Pour vraiment bien faire, il faut faire, au lieu d'une diagonalisation de la matrice de variance covariance, une SVD de la matrice d'origine. Il y a du code pour faire cela dans Netlib, et chez Numerical Recipes (il y a une version en ligne de la seconde édition sur le web, mais c'est de toutes facons un livre à posséder)

    En termes de références stats, je recommande le Volle (Analyse des données, chez Economica), plus facile à lire que les Benzecri, Saporta et consorts, à mon avis...
    Sauf que tu n'as pas le droit de t'inspirer du code des NR. Et recoder les algos de Netlib (écrits en Fortran, et il n'y en a pas qu'un seul) pour les retraduire en VBA, c'est un peu complexe, non ? Là encore, j'essaie de me mettre à la place de l'auteur du sujet, et je suis désolé, mais une SVD, ce n'est pas un problème simple. Même si on trouve plusieurs excellents ouvrages sur le sujet (comme le Golub qui est la référence en ce domaine), le traduire en VBA, ce n'est pas à la portée du premier venu (je ne dis pas non plus que l'auteur l'est), vil faut avoir une bibliothèque matricielle à côté.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Du calme, c'est juste des maths...

    Citation Envoyé par Matthieu Brucher Voir le message
    ces outils sont obsolètes sur les jeux de données non linéaires.
    Je ne sais pas ce qu'est une donnée non linéaire... un modèle peut l'être, une donnée? Quant à l'obsolescence de ces méthodes, il me semble que des approches tout à fait modernes (par exemple les SVM, ou dans le domaine des métriques, les HSIC) ont une certaine tendance à "linéariser" les problèmes, et à bâtir des bases orthogonales (le HS de HSIC c'est Hilbert Schmidt, je crois...)

    Mais ce n'est pas la question, le problème ici est linéaire.

    Les données initiales sont des projections (linéaires), de données sur une série de variables, qui sont elles même des combinaisons linéaires d'autres variables. On met tout cela dans une matrice, dont on veut éliminer les corrélations (linéaires aussi)...

    Dans ce monde bien linéaire, il semble assez logique que tout finisse par la diagonalisation d'une matrice symétrique (qui exprime ces corrélations).

    La question, du coup, comme souvent en stats, se ramène à un problème d'estimation: comment estimer cette matrice à partir des données empiriques.

    Citation Envoyé par Matthieu Brucher Voir le message
    C'est bizarrement aussi ce que fait l'ACP. Dingue, non ?
    Je ne dis pas le contraire. Je cherchais juste à expliquer que le formalisme de l'AFC est plus adapté à ce problème que celui de l'ACP.

    Citation Envoyé par Matthieu Brucher Voir le message
    Tout dépend de ce que tu cherches à faire (et n'essaie pas de me faire croire que je me trompe dans ce que je dis, ma thèse a porté sur ce domaine). Je parle des K-means pour faire une classification non supervisée.
    Je ne mets pas en doute tes connaissances. Je dis simplement que si tu fais une ACP, ou une AFC (comme cela semble logique ici), tu n'auras pas besoin des K-means, car tu vas obtenir, directement, tes "variables décorrélées" (exprimées comme combinaison linéaires des variables d'origine), classées par ordre d'importance (les valeurs propres). C'est à dire ce qui est demandé ici.

    Citation Envoyé par Matthieu Brucher Voir le message
    Sauf que tu n'as pas le droit de t'inspirer du code des NR
    Heureusement que si ! Sinon, on ne pourrait plus écrire beaucoup d'analyse numérique vu le nombre d'algos de base qui sont dans NR. Tu n'as pas le droit de recopier le code et de le redistribuer, mais le lire et t'en inspirer, heureusement. C'est expliqué quelque part dans la préface ou le premier chapitre, je crois...

    Citation Envoyé par Matthieu Brucher Voir le message
    Et recoder les algos de Netlib (écrits en Fortran, et il n'y en a pas qu'un seul) pour les retraduire en VBA, c'est un peu complexe, non ?
    Y'a du netlib en C et en C++ (meschasch en C, linalg en C++, les deux ont des SVD), et l'OP faisait remarquer qu'il avait les moyens de convertir de C en VBA...

    En VBA, si l'on oublie la SVD (sur de petites matrices, et moyennant quelques trucs, comme ajouter une petite diagonale à la matrice de VarCov avant de l'inverser), je pense qu'on peut également trouver du code pour calculer les valeurs. Mais bon, s'il a matlab sous la main...

    Ce qui est délicat, à mon avis, c'est de ne pas se tromper dans les calculs sur les matrices de passage.

    Francois
    Dernière modification par Invité ; 19/07/2009 à 22h07.

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Je ne sais pas ce qu'est une donnée non linéaire... un modèle peut l'être, une donnée? Quant à l'obsolescence de ces méthodes, il me semble que des approches tout à fait modernes (par exemple les SVM, ou dans le domaine des métriques, les HSIC) ont une certaine tendance à "linéariser" les problèmes, et à bâtir des bases orthogonales (le HS de HSIC c'est Hilbert Schmidt, je crois...)
    Les SVM, ça ne marche bien que lorsque les données sont réduites, et dans ce cas, on passe par des réductions non linéaires. L'immense majorité des problèmes et des modèles à créer sont en réalité non linéaires.

    Citation Envoyé par fcharton Voir le message
    Les données initiales sont des projections (linéaires), de données sur une série de variables, qui sont elles même des combinaisons linéaires d'autres variables. On met tout cela dans une matrice, dont on veut éliminer les corrélations (linéaires aussi)...

    Dans ce monde bien linéaire, il semble assez logique que tout finisse par la diagonalisation d'une matrice symétrique (qui exprime ces corrélations).

    La question, du coup, comme souvent en stats, se ramène à un problème d'estimation: comment estimer cette matrice à partir des données empiriques.
    Ce n'est pas parce que certaines étapes sont linéaires que la variété sous-jacente est euclidienne.

    Citation Envoyé par fcharton Voir le message
    Je ne mets pas en doute tes connaissances. Je dis simplement que si tu fais une ACP, ou une AFC (comme cela semble logique ici), tu n'auras pas besoin des K-means, car tu vas obtenir, directement, tes "variables décorrélées" (exprimées comme combinaison linéaires des variables d'origine), classées par ordre d'importance (les valeurs propres). C'est à dire ce qui est demandé ici.
    Non, ça ne suffit pas. C'est valable que s'il y a des facteurs qui ont une action linéaire.

    Citation Envoyé par fcharton Voir le message
    Heureusement que si ! Sinon, on ne pourrait plus écrire beaucoup d'analyse numérique vu le nombre d'algos de base qui sont dans NR. Tu n'as pas le droit de recopier le code et de le redistribuer, mais le lire et t'en inspirer, heureusement. C'est expliqué quelque part dans la préface ou le premier chapitre, je crois...
    OK, si la licence est assez claire ça va (mais bon, en plus le code NR n'est pas le plus clean et le meilleur qu'il soit )

    Citation Envoyé par fcharton Voir le message
    Y'a du netlib en C et en C++ (meschasch en C, linalg en C++, les deux ont des SVD), et l'OP faisait remarquer qu'il avait les moyens de convertir de C en VBA...

    En VBA, si l'on oublie la SVD (sur de petites matrices, et moyennant quelques trucs, comme ajouter une petite diagonale à la matrice de VarCov avant de l'inverser), je pense qu'on peut également trouver du code pour calculer les valeurs. Mais bon, s'il a matlab sous la main...

    Ce qui est délicat, à mon avis, c'est de ne pas se tromper dans les calculs sur les matrices de passage.
    Oui, surtout en VBA

Discussions similaires

  1. Classification par l'analyse en composante principal (ACP) (PCA en anglais)
    Par SVDSVD dans le forum Méthodes exploratoires
    Réponses: 8
    Dernier message: 29/05/2012, 22h29
  2. l'analyse en composante principale ACP OU CPA
    Par imagerie médicale dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 04/08/2011, 22h34
  3. Complexité temporelle de l'analyse en composantes principales (ACP)
    Par abidineb dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/07/2011, 22h59
  4. Réponses: 1
    Dernier message: 16/03/2011, 21h15
  5. L'analyse en composantes principales"ACP"
    Par rosa20 dans le forum Méthodes exploratoires
    Réponses: 0
    Dernier message: 17/05/2010, 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