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 :

problème d'utilisation de princomp


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut problème d'utilisation de princomp
    j'ai une base de données qui contient deux classe. classe1 de dimension (300*24) et classe2 de dimension (700*24).
    j'ai été utilisé le réseau de neurone pour classifier les deux classes, mais j'ai besoin de réduire la dimension de la base(24) , donc j'ai été utilisé ACP sous matlab en appliquant la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [COEFF,SCORE,latent,tsquare] = princomp(X).
    mon problème est que j'arrive pas à comprendre la sortie de cette fonction. mon vrai problème est que j'ai besoin de connaitre quelles sont les données utiles retourné par cette fonction.merci de m'aidez.

  2. #2
    Membre du Club
    Homme Profil pro
    R&D
    Inscrit en
    Mai 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2008
    Messages : 101
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Cette fonction fait une analyse en composantes principales (ACP) sur tes données.

    Soit la décomposition de ta matrice X initiale par une matrice des loadings et une matrice des scores tel que

    X = t.p' + E

    ou

    X = t1.p1' + t2.p2' + ... + t24.p24'

    Si tu utilises les fonction princomp, les outputs sont :

    Coeff : Loadings (informations sur les variables de ta matrice)
    Scores : Scores (informations sur les indicidus)
    Latent : Valeurs propres de la matrice de covariance
    tsquare : T² Hotelling

    Les termes les plus imprtants sont les coeff et les scores. Plus tu ajoutes un ensemble t.p, plus tu réduis la matrice erreur mais en général, seules les premières composantes sont significatives.

    Le principe de l'ACP est assez bien détaillé sur le net...

    J'espère que ces infos t'aideront !


  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut princomp
    merci, mais j'aimerai connaitre une chose. moi j'ai deux classe, j'aimerai reduire leus dimension( de 24 vers un autre dimension inférieur). mon question c'est: la fonction princomp(X) retourne t-elle les données de dimension finale(inférieur à 24) ou elle fait juste une analyse à exploiter par une autre fonction pour reduire la dimension? merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    je veux dire . quelle est la variable rétourné e par et qui contienne les composantes principales.(les variables pertinente).

  5. #5
    Membre du Club
    Homme Profil pro
    R&D
    Inscrit en
    Mai 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2008
    Messages : 101
    Points : 62
    Points
    62
    Par défaut
    Princomp va te sortir les 24 composantes que l'ACP peut calculer.
    (Soit 24 vecteurs des scores, 24 vecteurs des loadings)

    X = t1.p1' + t2.p2' + ... + t24.p24'

    Si tu veux te limiter à a quelques composantes, à toi de les sélectionner !

    En général, seules les premières sont significatives mais tout dépend de ton jeu de données.

    Pour choisir le nombre de composante, tu peux te baser sur la matrice erreur (E = X - TP') ou sur des calculs plus rigoureux (Variance expliquée par exemple...)

    Il est important que tu comprennes le principe de l'ACP avant de lancer une analyse avec Princomp, un petit tour sur Google pourrait être utile...


  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    j'ai consulté beaucoup des articles sur ACP, j'ai compris que l'ACP chercher de reduire la dimension des données en se basant d'écrire les nouvelles composantes C1,C2,...........,Cp sous forme des combinaisons linéaires des anciens composantes(X1,X2,.............,Xn).
    telque p<=n.telque les Ci soient des variances maximales, non corrélées.

    en fin le premier axe C1 doit être le vecteurs propre ayant la valeur propre maximal de matrice de covariance des données intiales(vecteur X parexemple) et ainsi de suite.(en fin les axes principales sont les vecteurs propres ) et pour obtenir les nouvelles données, il suffit de projeter les données intiales sur les nouvelles axes. est ce que c'est juste!! désl peut être très long.

    voilà mon code:
    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
    %donnee=load('spame.txt');
    donnee=[1 0 1 0;2 0 2 0; 3 4 5 6; 8 9 12 3];
    tail=size(donnee,1);
    %moyenne de données
    moy=mean(donnee)';
    %ecart type de données
    ecart=std(donnee)';
    %données centré reduite: suit la loi normale centré réduite
    vecunit=linspace(1,1,tail)';
    y=donnee-vecunit*moy';
    ds=diag(ecart)^-1;
    z=y*ds;
    % matrice de covariance
    v=(z'*z)/tail;
    %valeurs propre  dans l'ordre décroissant et vecteur propre
    [f h] = eigs(v);
    % projection des données sur les vecteurs propres.
    util=z*f;
     
    display('util==')
    util

  7. #7
    Membre du Club
    Homme Profil pro
    R&D
    Inscrit en
    Mai 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2008
    Messages : 101
    Points : 62
    Points
    62
    Par défaut
    Ok pour le principe, mais princomp t'évite justement de recoder tout ça...

    Reprenons ton problème...Si tu as une matrice x = rand(10,100) par exemple.

    % ACP
    [loads,scores,variance,t2] = princomp(x);

    En regardant le vecteur variance, tu peux déjà avoir une idée du nombre de composantes à prendre en compte (proche de 0 ça signifie que la variance de tes systèmes est expliquée par tes composantes).

    Si tu choisis 2 composantes par exemple :
    t1 = scores(:,1);
    t2 = scores(:,2);
    p1 = loads(:,1);
    p2 = loads(:,2);

    et tu peux écrire :
    X = t1.p1' + t2.p2'

    Tu limites ton nombre de variables à 2 et normalement le terme erreur est faible.


  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    la sortie variance retourné par princomp() se ressemble(egale) aux valeurs propres de matrice de covariance donc si la valeur propre est nul ou faible donc la variance est minimale et par suite on peut éliminer le vecteur propre associé à cette valeur et prendre juste les vecteurs dont leurs valeurs propres sont non nuls. c'est vrai?

Discussions similaires

  1. [RTFEditorKit] Problème d'utilisation
    Par jean.lamy dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/10/2004, 18h30
  2. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  3. [cvs] problèmes d'utilisation
    Par gromite dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/06/2004, 17h41
  4. Problème: Requête utilisant NOT IN
    Par fages dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/05/2004, 10h18
  5. problème d'utilisation avec turbo pascal 7.0
    Par le 27 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 03/12/2003, 10h44

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