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 :

Perceptron multicouche et classification non linéaire


Sujet :

Méthodes prédictives

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut Perceptron multicouche et classification non linéaire
    Bonjour,

    J'ai programmer un réseau de neurone multicouche afin de classifier des zones non lineaire. Pour tester j'ai donc créé une base de données de 2 entrées (e1,e2, t) suivant une fonction non lineaire f(x) = 2x² par exemple. Si y > f(x) t= 1 sinon t=0.

    L'ensemble des fonctions d'activation sont des sigmoides. J'ai ensuite crée un perceptron multicouche comportant un neurone en sortie deux neurones sur la couche inférieur et le vecteur d'entrée en dessous.

    Lorsque je fais l'apprentissage et la généralisation, la ligne de partage entre les deux zones est une droite et pas une fonction non lineaire.

    Je voudrais savoir si le réseau que j'ai créé est suffisant pour gérer cette classification non lineaire??
    D'avance merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Après quelques tests rapides avec le module python ffnet, il semble qu'il faille faire très attention à bien équilibrer les classes, pour que l'algo converge.
    En tirant x,y uniformément dans un rectangle, j'avais des classes déséquilibrées et l'algo ne convergeait pas.

    Un autre point qui peut faire la différence est la fonction du neurone de sortie.
    Souvent il s'agit juste de l'identité (f(a) = a) ce qui permet d'éviter les problème d'échelle.

    Après si tu veux vraiment faire de classification (et pas juste te familiariser avec les réseaux de neurones) je te conseille plutôt de regarder du coté des
    machine à vecteurs supports (SVM) avec noyaux RBF pour le mode non linéaire, par ex.

    [edit]
    avec la même architecture de réseau que toi, j'obtiens des scores de classification de l'ordre de 95%
    [/edit]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut Re
    Merci Alexis.M pour ta réponse.

    En ce qui concerne la distribution de la base de données d'apprentissage, j'ai tiré aléatoirement les points par un random sur [0,1] pour l'entrée e1 et e2. Mais c vrai que la deuxième classe du fait de la fonction a une aire légérement plus faible que la 1ere. Je sais pas si ca peux jouer enormement. J'ai tiré aléatoirement 4000 points pour modèliser les deux zones.


    Pour la deuxième question , elle porte sur ta remarque sur la fonction de sortie. En quoi une fonction linéaire résout-elle les problèmes de mise à l'echelle (quelles echelles, les données d'entrées ??).

    Je cherche actuellement des bases de données sur internet pour tester mes algos. Comment fait-on quand on a des données qui sont par exemple en concentration de molécules pour traiter les données. Doit-on les normaliser sur [0,1] ? Doit-on privilégier certaines fonction d'activation? Les données négatives posent-elles problèmes?

    Je sais que ca fait pas mal de question ... Pas forcement des plus sensés je pense ...

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Dans les tests que j'ai effectués avec ffnet, l'algo ne convergeait pas si les classes n'étaient pas équilibrées donc oui ce la peut avoir une grosse influence.

    Avec une fonction de sortie sigmoidale, le réseau ne peut atteindre qu'une plage limitée de valeurs [0,1] ou [-1,1], alors qu'avec une fonction linéaire toutes valeur réelles est théoriquement possible. Cela dit dans le cas de la classification, il est clairement préférable de garder une fonction sigmoïde: c'est équivalent à essayer d'atteindre +inf et -inf sauf que ça a le gros avantage de permettre de faire les calculs. La sortie linéaire est utile pour faire de la régression, pas de la classification. Je suis désolé d'avoir introduit de la confusion, j'ai juste cité les problèmes souvent rencontrés avec les réseaux de neurones.

    Si tu as des types de données très différents avec des domaines de définition très différents, il est souvent utile de centrer-réduire tes données. C'est à dire pour chaque composante indépendamment, de soustraire la moyenne est de diviser par l'écart-type.

    Les données à valeurs négatives ne posent pas de problème a priori.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut Re
    Déja merci poiur tes réponses.

    Je viens de finir l'implémentation de mon algo pour les perceptrons multicouches.
    J'ai fait un test: 2 entrées e1 et e2. 2 etages : 1 neurone de sortie et 2 neurones cachés.

    Quand je fais l'apprentissage sur une base de donnée simple du genre une fonction y = x, ca fonctionne bien. Mais dès que je met un étage de plus pour la même fonction , ca ne marche plus. Il me met tt classifier en zone 1 ou en zone 2.

    La fonction est-elle trop "simple" pour le réseau?

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Je ne peux pas te répondre, je n'utilise pas les réseaux de neurones, j'ai juste pas mal lu sur ce sujet à une époque. Comme je l'ai déjà signalé, en pratique, sauf cas spécifique, on utilise plutôt des SVM pour la classification. Avec un noyau RBF, les SVM sont également capables d'approximer n'importe qu'elle frontière de décision.

    Il y aussi les classifieurs/regresseurs par forêts aléatoires qui sont à la mode.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut
    Merci en tout cas pour les réponses.
    Je viens de trouver le problème. Ca venait visiblement de du taux d'apprentissage.
    Je me suis rendu compte que le choix de cette valeur est primordiale. Ca peut faire completement diverger le système.

    Une dernière question pour la route. Je voudrais savoir si il existe une lois qui estime la valeur de ce taux ( cette valeur n'est pas fixe dans mon programme, elle diminue de facon exponentielle) en fonction des données d'entrées et de la complexité de la base de données?

  8. #8
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    à ma connaissance, le seul moyen connu pour dimensionner le taux d'apprentissage est de sélectionner (statistiquement) le meilleur modèle à l'aide d'une base de validation.

Discussions similaires

  1. Correlation non linéaire
    Par vinzzzz dans le forum Statistiques, Data Mining et Data Science
    Réponses: 5
    Dernier message: 07/07/2007, 14h27
  2. Comment gerer une suite non linéaire?
    Par nicoroth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2007, 13h26
  3. Reconnaissance des entiers par perceptron multicouche ?
    Par ballo dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 16/05/2007, 01h33
  4. Réponses: 1
    Dernier message: 14/02/2007, 11h12
  5. [Perf] Performances non linéaires
    Par esteban dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/11/2006, 22h56

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