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 prédictives Discussion :

Comment améliorer les résultats d'un MLP ?


Sujet :

Méthodes prédictives

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut Comment améliorer les résultats d'un MLP ?
    bonjour,
    j'ai créé un MLP pour la prévision ayant comme architecture : 20 entrée, 1 couche cachée à 20 neur et 2 neurones de sortie voilà le 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    clear,clc,close all 
    x=(load ('x.txt'));
    d=(load ('d.txt')); % Chargement des données x:input , d:sortie désirée
    xt=(load ('xt.txt')); 
    dt=(load ('dt.txt')); % xt et dt ensemble de test
    [xn,minx,maxx,dn,mind,maxd]=premnmx(x,d);
    [xtn,minxt,maxxt,dtn,mindt,maxdt]=premnmx(xt,dt);%assigner les valeurs entre -1 et 1
    pr = minmax(xn); % pr est Rx2 est une matrice des valeurs min et max de la matrice xn de dim (RxQ)
    net = newff(pr, [20 2],{'tansig','tansig'},'traingdm'); % créer a « feed-forward backpropagation network » avec une couche caché de 20 neurones et une couche de sortie avec 2 neurone.
     
    %Specify these parameters:
     
     net.trainParam.epochs=1000;
     %net.trainParam.goal=0.005
     net.trainParam.lr=0.001;
     %net.trainParam.mc=0.06;
    net=train(net,xn,dn); % Train a neural network. 
     
    %phase de test
    y=sim(net,xt); 
    y
    t=postmnmx(y,mindt,maxdt);
    e=dt-y;
    e
    plot(2)
    plot(dt')
    hold
    plot(t','r');
    title('Comparison entre valeur actuelle et la prévision')
    err=[y-dt].^2;
    mse=mean(err)
    mais ce qui me gène c'est que la prévision des deux sorties est souvent très différentes des valeurs désirées lors de la phase de test, alors que mon travail ne sera correcte que si je trouve des courbes proches pacequ'il s'agit de prévision de série temporelles

    voilà les courbes comparatives que j'obtient :

    1- en utilisant le paramètre goal=0.005 et lr=0.001 et mc=0.006



    2- en utilisant seulement le paramètre lr=0.001



    les deux courbes bleue et vertes représentent les deux sorties désirér ( xt) les courbes rouges représentent les sorties prédites.

    s'il vous plait comment doit- je procéder pour améliorer la performance de mon réseau? sachant que j'ai augmenter le nbr de neur. caché jusqu'à 100 mais toujours le même problème
    merci de m'aider c'est ma première expérience en RN et je galère beaucoup.

    cordialement

  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 : 46
    Localisation : Etats-Unis

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

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

    pourquoi deux neurones de sortie ? Combien de classes as tu en sortie ?

    Il est souvent inutile de mettre trop de neurones dans la couche cachée. La très grande majorité des réseaux de neurones ont une forme pyramidale : Ncaché = (Ninput+Noutput)/a.

    Il y a plusieurs explications possibles à ton manque de performances :
    - caractéristiques non pertinentes => étudie bien ton problème, comment manipuler ou créer des descripteurs plus performants (pertinents). Donc on est sur un travail en amont de MLP.
    - erreurs irréductibles => ben oui, ça arrive. Les réseaux de neurones sont très puissants (aussi puissants que capricieux), mais il ne peuvent modéliser que ce qui ne peut l'être. As tu fait une étude de tes données avant de commencer à travailler (outliers, corrélations, distributions, etc.)? Là on est sur un travail sur les données.
    - méthode d'ajustement des poids inadaptée => faut en essayer d'autres. Là on est sur un travail d'architecture.

    Bref, il te faut travailler sur ces trois points pour améliorer ton MLP.

    Au fait, comment valides tu tes modèles?
    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
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    bonjour,

    merci toto pour votre réponse

    en fait mon problème consiste à effectuer une prévision de heure de la pointe et heure du creux de consommation d'électricité pour un jour donné i(c'est pour cette raison que j'ai deux neurones de sortie : 1-->heure_pointe ; 2--->heure_creux)

    j'ai choisi comme descripteur :
    -heures des pointes des 5 jours passés
    --heures des creux des 5 jours passés
    ---température minimales des 5 jours passés
    ----températures maximales des 5 jours passé
    As tu fait une étude de tes données avant de commencer à travailler (outliers, corrélations, distributions, etc.)?
    non je n'ai pas fait juste j'ai constater que l'heure de la pointe varie selon la saison donc elle est necessairement influencée par la température,
    mais j'ai maintenant regardé la matrice de correlation entre heures (pointe et creux ) et température j'ai trouvé qu'elle ne sont pas correlés ( coef de l'ordre de 0.3 )
    j'ai maintenat regarder la distribution des variable (graphe quantiles-quantiles) mais c'est loin d'être une distribution normale
    question svp : comment est-ce que la distribution peut m'aider dans le choix des descripteurs?

    - j'ai choisi le retard de 5 jours dans les variables explicatives parce normalement le jour i (pour lequel je doit prévoir l'heure de la pointe et l'heure du creux) représente la même structure (concernant les variables ) que les 5 jours passés. bref .. je ne sais pas si un bon raisonnement.

    - méthode d'ajustement des poids inadaptée => faut en essayer d'autres. Là on est sur un travail d'architecture.
    en fait j'ai essayé plusieurs fonction d'activation et plusieurs méthode d'apprentissage (en changeant les paramètres de la fonction newff)
    Au fait, comment valide tu tes modèles?
    pour le moment j'ai seuement fait l'apprentissage sur un échantillon et un test sur un autre (cf le code source) et j'ai regarder les résultats ;
    mais normalement je doit utiliser une base avec plus d'exemple.
    j'ai lu sur la méthode de validation croisée pour validé le modèle mais je pense que ça prend énormémment de temps!! existe-t il d'autre façon pour valider?

    désolée pour avoir posé trop de questions, mais j'ai vraiment besoin de l'aide d'un pro pour réussir mon modèle vu mon manque d'expérince.

  4. #4
    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 : 46
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonsoir,

    pour ce qui est des conseils de Pros... euh... comment dire? C'est pas gagné

    - si tu sais qu'il y a un rapport avec les températures, je te conseilles fortement d'ajouter au moins une courbe de température. Même si celle-si sera fortement corrélée avec tes descripteurs précédents. Il pourrait peut être même en ressortir que tes descripteurs soient inutiles et qu'utiliser la température suffit.

    - En tout cas, je suis plutôt parti de BIEN étudier les descripteurs, vraiment comprendre les finesses du problème, plutôt que de tout donner à un classifieur en se disant : "il est puissant, il se débrouillera".

    - Questions qui me passent par la tête
    1 => Est ce que ce ne serait pas lié à la météo? Ben oui, selon le temps qu'il fait, la température varie et donc la consommation...
    2 => Est ce que tes exemples appartiennent tous à la même région? En fonction de la région, la température n'est pas la même, donc les besoins en chauffage varient. Ce que je veux surtout dire c'est si dans tes exemples tu as des courbes représentant des régions différentes, alors tu auras des erreurs irréductibles.

    - 5 jours, pourquoi pas... mais pourquoi pas 7? ou 10? Bref, n'a tu pas un moyen de valider ce choix pour l'instant intuitif et arbitraire. Ne peux tu pas faire une étude des corrélations sur des durées?

    - Pour la validation, tu n'as pas le choix. Cela demande plus de calculs, mais il faut valider. La validation croisée c'est bien, mais cela dépend du nombre d'exemple que tu as. D'ailleurs, combien en as tu?

    - Pour t'améliorer, je te conseille TRES vivement de lire ce livre. Il est absolument indispensable lorsque l'on souhaite faire du data mining ou tout ce qui est apprentissage .
    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.

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    bonsoir,

    pour ce qui est des conseils de Pros... euh... comment dire? C'est pas gagné
    hélas !!!


    j'ai essayé de considèrer comme discripteurs seulement la température min et max et voilà ce que g obtenu :



    (N.B : j'ai essayé de changer les paramètres du rés de plusieurs façon, mais toujours la même forme : la courbe de prévision démarre d'une valeurs très inférieure à celle de la courbe réelle)

    Questions qui me passent par la tête
    1 => Est ce que ce ne serait pas lié à la météo? Ben oui, selon le temps qu'il fait, la température varie et donc la consommation...
    oui c'est surement li" à la meteo, parceque je voi que lorsque la saison change, la plage de valeurs des heures de max et min de consommation change aussi, mais j'ai pas pu exprimer ceci par un graphique.

    2 => Est ce que tes exemples appartiennent tous à la même région? En fonction de la région, la température n'est pas la même, donc les besoins en chauffage varient. Ce que je veux surtout dire c'est si dans tes exemples tu as des courbes représentant des régions différentes, alors tu auras des erreurs irréductibles.
    oui mes exemples sont tous de la même région.

    - 5 jours, pourquoi pas... mais pourquoi pas 7? ou 10? Bref, n'a tu pas un moyen de valider ce choix pour l'instant intuitif et arbitraire. Ne peux tu pas faire une étude des corrélations sur des durées?
    je me suis aussi posé la même question, mais pas de réponse convainquante
    j'ai essayer de regarder le correlogramme (fonction d'autocorrelation) de la serie temporelle des heures de pointes et des creux, et j'ai remarqué qu'il y a un pic chaque les sept jours...mais ce n'est pas une bonne justification de choisir 7 jour non plus !!! parceque tous les coef d'autocorrelation sont significatifs sauf que celui au retard N° 7 , 14, 21 ... est plus grand qu'aux autres.

    D'ailleurs, combien en as tu?
    j'ai des données jounalière pour 7 ans, que je doit classer entre jour ouvrables et jours férier (et faire l'apprentissage pour chaque type à part)

    question : je ne comprends pas encore la difference entre test et validation, est ce que je peut valider mon modèle par les résultats obtenu sur l'ech de test seulement ? est comment le valider c-à-d qu'elle critères?

    merci pour le livre, trèèès interessant, mais le pb que j'ai plus de temps, je doit étudier deux autres modèles en plus sue celui là.. je doit déposer mon travail en fin Mai et je n'ai encore aucun résultat fiable

    les graphs que j'ai mis sont pour une base de 16 exemple d'apprentissage et 8 de test, j'ai construit cette petite base juste pour essayer.
    mais est ce que le nombres réduits d'exemples peut être la cause des mauvais résultats obtenus??

  6. #6
    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 : 46
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Citation Envoyé par tamaris85 Voir le message
    les graphs que j'ai mis sont pour une base de 16 exemple d'apprentissage et 8 de test, j'ai construit cette petite base juste pour essayer.
    mais est ce que le nombres réduits d'exemples peut être la cause des mauvais résultats obtenus??
    Rho...
    Essayons de te faire comprendre ton erreur... le problème... les réseaux de neurones...
    Tu as dis que tu as mis 20 entrées (input=20). Admettons que tu aies une couche cachée standard (middle=10) et que tu aies un seul neurones en sortie (Output=1).
    Combien de poids as-tu?
    Réponse : Input*Middle + Middle*Output = 210.
    Dans ce cas tout simple, ton MLP doit ajuster 210 poids, avec seulement 16 cas (instances, individus) Il faut compter au minimum quatre à cinq fois plus d'instances que de neurones. Sinon => Apprentissage par coeur & ajustement impossible.

    Pour ta question, tu choisis un échantillon de travail composé de N individus (plus N est grand, mieux c'est). Tu divises ton échantillon en deux échantillons (apprentissage et validation) => Tu entraînes ton réseau de neurones sur l'échantillon d'apprentissage et tu le teste/valide sur l'échantillon de validation.

    Tu as alors plusieurs protocoles de validation possible en fonction du nombre d'individus :
    - Validation croisée classique (si N suffisant).
    - BootStrap (Idem).
    - k-Fold (appelé aussi N-fold out), si ton nombre d'individu est limite (moins de 1000/1500).
    - Leave One Out (c'est un k-fold avec k=N) si tu as très peu d'individus (instances), de l'ordre de moins de 400.
    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.

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

Discussions similaires

  1. Comment classer les résultats de ma requete ?
    Par eustache dans le forum Requêtes et SQL.
    Réponses: 19
    Dernier message: 27/02/2009, 22h03
  2. Réponses: 2
    Dernier message: 26/09/2006, 08h56
  3. Réponses: 2
    Dernier message: 01/08/2006, 10h20
  4. Réponses: 3
    Dernier message: 04/07/2006, 16h34

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