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

Mathématiques Discussion :

Algorithme de Gauss-Newton et regression non linéaire


Sujet :

Mathématiques

  1. #1
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut Algorithme de Gauss-Newton et regression non linéaire
    Bonjour,
    Sujet tendu, j'ai vraiment du mal à aller au bout des choses alors que je n'ai pas le bagage nécessaire pour saisir aisément le sujet.
    J'ai un ensemble de point d'une cinétique, elle suit une loi bien fixé : c'est une fonction logistique à 3 arguments :
    f(x) = p3/(1-exp(-p1-p2*x))
    J'ai testé des régressions non linéaire à l'aide de cette fonction, ça colle tout le temps, le soucis c'est que je dois de mon côté trouver l'algorithme qui fait cette régression pour le coder derrière.

    Je me suis penché dans mes recherches sur l'algorithme de gauss-Newton, mais même d'un point de vu mathématique, je ne comprend pas tout. Je n'ai pas la notion de matrice jacobienne par exemple.
    Ce que j'aimerais de votre par c'est une explication de ce que peut faire cet algorithme et comment l'appliquer à mon cas, sinon des solutions, au moins un coup de pousse, je patauge complètement.
    Sinon, si des outils gratuits existent pour effectuer ce genre de chose, avec la contrainte d'être contrôle par vb.net (oui, je suis chiant).

    Le logiciel que j'ai utilisé (et que je veux en définitive copier, du moins sur la régression, le reste ne m'intéresse pas) est XL stat.
    Merci d'avance, tout coup de pouce sera le bienvenue, j'ai pas l'impression d'être très loin d'une solution :/
    Expert en recherche google caféinomane

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Je vais essayer d'expliquer en banalisant un peu la chose (pour moi aussi j'ai pas fait ça depuis longtemps) :

    - Tu as couples de points notés :
    - Tu souhaites trouver les paramètres pour que la fonction fit au mieux avec les couples de points précédents. C'est-à-dire, on voudrait dans l'idéal que .
    - Dans la pratique, on ne peut pas avoir à tout les coups pour tous les couples (cf wikipédia pour savoir pk).
    - On cherche alors, pour chaque couples, à minimiser l'erreur commise : . Ce qui revient à minimiser la somme des erreurs :


    - Dans le cas de l'algorithme de newton, on parle de "moindre carrée". Il s'agit enfaite de minimiser la somme des erreurs au carrée :


    C'est-à-dire que l'on préfère par exemple avoir 2 erreurs de 5 (5^2 + 5^2 = 50) plutôt qu'une erreur de 10 (10^2 = 100).




    On a donc une fonction :

    dont on cherche le minimum.
    Chercher le minimum d'une fonction à une variable c'est assez simple, on peut utiliser les dérivées par exemple et qui te donnerons une formule littéral.
    Dans ton cas, on cherche le minimum d'une fonction à 3 variables de manière numérique.




    Tu peux déjà essayer d'imager en 3 dimensions avec 2 variables. Le principe de l'algo c'est de partir d'un point initial et d'effectuer une successions d'itérations consistant à minimiser la fonction sur le principe de directions de descentes :





    Pour l'algorithme de Gauss-Newton je vais me contenter de recopier wikipédia, car ça fait longtemps que j'ai pas fait ce type d'exo (A savoir qu'il y a une théorie qui se cache derrière tous ça )

    On note alors :

    et désigne l'évaluation de et de au point .


    Donc je te souhaite bonne chance si tu veux toujours t'amuser à le coder. Tu vas devoir faire des calculs de matrice inverses.
    Attention aussi au fait que ta fonction n'est pas continue.

    Perso je te conseil de ne pas réinventer la roue et d'utiliser des bibliothèques qui existent déjà.

  3. #3
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Bonjour,
    Merci pour ton aide, la façon dont tu expliques tout ça est plus clair que ce que j'ai pu trouvé pour le moment.
    Je me rend compte encore plus de la difficulté de l'exercice ...
    J'aimerais ne pas réinventer la roue, mais j'ai également des limitations techniques : je dois trouver une solution gratuite qui fonction sous vba ou vb.net. Je file tout de suite chercher des bibliothèques du coup ~~~
    Expert en recherche google caféinomane

  4. #4
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Re !
    J'ai cherché et trouvé un fichier sur le site suivant : http://www.danielroux.fr/bibliovba/telechargement.php
    Dans la partie sur la régression, il y a bien l'algo qui pourrait m'intéresser, dans la dernière feuille du classeur, la régression logistique.
    Soucis dans l'histoire : il est à 4 arguments ...
    La fonction utilisé dans l'algo et le suivant :
    Y(x) = a*((1+m*exp(-x/tau))/(1+n*exp(-x/tau)))
    Par rapport à ma formule j'ai imaginé : a = P3, m=0, -1/tau = p2 et -ln(n) = p1.
    L'algo utilisé n'est pas celui sur lequel je partais, il s'agit de l'algo de Levenberg-Marquardt.
    En fouillant la macro, j'ai pu voir que c'était variable au niveau des arguments, que je pouvais faire varier moi même le nombre d'argument mais il me ressort une erreur quand je traite des données expérimentales en gardant arguments au lieu de 4...
    Je vais aller ouvrir un sujet dans la partie VBA pour l'aide au niveau progra, mais j'ai l'intime conviction que seul un matheux pourra m'aider dans cette histoire ...
    Je vais aussi fouillé en direction de Levenberg-Marquardt.
    Expert en recherche google caféinomane

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Tu peux nous donner une série de points, pour faire un test =)
    Sous la forme :
    X = [x1, x2, ..., xn]
    Y = [y1, y2, ..., yn]

  6. #6
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    D'accord, je met ça en xls en pièce jointe.
    Ce sont trois jeux de données A, B et C et la valeur temporelle t en abscisse.
    Merci beaucoup pour ton aide.
    Fichiers attachés Fichiers attachés
    Expert en recherche google caféinomane

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    ça ressemble a un système du deuxieme ordre.

    Tu es sur de ta fonction f(x) ?

  8. #8
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    La première que j'ai apporté, testé avec XLstat fonctionne très bien pour la majorité des cas, excepté les cas de diminution en Y après l'asymptote et des cas très particuliers où la courbe pratique montre une double sigmoïde.
    Ce sont des données issus de la microbiologie, du peu que j'ai vu du système du second ordre, ce n'est pas vraiment représentatif, théoriquement mes courbes sont en quelques étapes : phase stationnaire, puis accélération, exponentielle, ralentissement puis asymptote.
    Depuis le début de mes recherches, la fonction logistique m'a paru la plus approprié malgré des tests sur d'autres systèmes.
    Après tu n'as qu'un échantillon de données composé de 3 cinétiques peut être qu'elles sont d'une forme qui fait penser au système que tu évoques.
    Je vais recherché ça mais je peux te donner une cinétique "type" si c'est nécessaire.
    Expert en recherche google caféinomane

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    et quelles sont les valeurs donnée a (p1, p2, p3) par ton logiciel sur la série A ?

  10. #10
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Série A :
    Nom : Capturea.PNG
Affichages : 2082
Taille : 19,8 Ko
    Série B :
    Nom : Captureb.PNG
Affichages : 2139
Taille : 19,6 Ko
    Série C :
    Nom : Capture.PNG
Affichages : 2101
Taille : 19,2 Ko

    En plus de graphiques, c'est ce que j'ai, en pièce jointe le fichier complet.

    (Ici les nom des colonnes étaient 0, 1 et 2 au lieu de A, B et C du coup, c'est ça qui apparait dans les formules en bas de capture, à la place de Y il y aura un chiffre. Ce n'est pas moi qui ait fait les travaux la dessus, c'est une prestation qu'on a demandé et qui n'a pas bien aboutit ... Dans ce cas, les 0 en début et fin d'équation représente respectivement Y et X.)
    Fichiers attachés Fichiers attachés
    Expert en recherche google caféinomane

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Ouai bah ton modèle ne suis pas du tout les points ^^

  12. #12
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    C'est à dire ? ^^ Précise qui est le modèle et d'où sortent les points. (je suis pas un calé en maths, j'ai une formation de biologie moi, associé à beaucoup auto apprentissage en informatique).
    Par ailleurs, j'ai réussi par une félicité qui sort de nul part à faire correspondre l'algo trouvé dans le lien que j'ai donné plus tôt dans la discussion.
    J'ai défini la plage de paramètre ailleurs, introduisant 1,1,1 pour respectivement a, n et tau.
    J'ai changé le nombre d'itération par 200.
    J'ai rajouté puis enlevé un msgbox de contrôle (j'arrivais pas a saisir pourquoi ça marchait pas, toutes les données étant là et le code assez variable pour tout comprendre)
    J'ai enlevé la msgbox et maintenant ça marche ...

    J'obtient des résultats avec un R² de 0.999, c'est mieux qu'espéré.
    Maintenant je dois réussi à sortir l'algo de là où il se trouve pour l'utiliser au beau milieu du reste de mes macros perso...
    Expert en recherche google caféinomane

  13. #13
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Je tiens à préciser que c'est un '+' dans le dénominateur, et donc ta fonction est continue.

    Ensuite, pour la série A uniquement, si je trace les courbes :


    - En rouge la courbe avec ton modèle
    - En bleu une courbe avec un système du deuxième ordre (j'ai mis les paramètres au pif, ce n'est pas le meilleur résultats on peut faire bcp mieux)

    Essaye une régression avec ce modèle :


    et supprime les 7 premiers points qui sont à 0. Ils n'ont pas d'intérêt.

  14. #14
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    D'accord, je comprends, sauf pour le + dans le dénominateur, je ne sais pas en quoi ça joue, mais c'est sans doute à cause de mes connaissances.

    Voilà une courbe type, théorique, de ce que j'obtient en pratique :
    Nom : Buchanan17.gif
Affichages : 3029
Taille : 2,2 Ko

    Ce qui m'intéresse dans la courbe, moi, c'est la phase qui va jusqu'à l'asymptote. Je cherche à modéliser ça pour récupérer le milieu de l'exponentielle, point crucial qui "défini" certaines propriétés de la courbe par rapport à une autre de même type.
    La modélisation rouge est plus proche de la théorie, et c'est ce qui m'intéresse le plus. La courbe bleu en est par contre très éloigné.
    En fait dans les données que tu as utilisés, au alentour des 17 heures, on a un phénomène qui biaise l'étude, qui n'est pas lié à un effet quelconque et qui surtout, ne m'intéresse pas. Du coup le modèle galère, en effet, parce que l'asymptote est "cassé" mais c'est déjà un cas étudié, dans le cas où cela arrive, j'ai créé une macro qui coupera les données durant la période du traitement et dans tout les cas ce sera des courbes signé d'un petit "attention" que l'on devra vérifier manuellement.
    Dernier point : les 0 ont un intérêt. Je travail ici sur des croissances bactériennes, le fait que la croissance comment non pas au temps T mais plus tard est un indicateur lorsqu'on test des substances bactéricides ou bactériostatiques.
    Expert en recherche google caféinomane

  15. #15
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Citation Envoyé par Uranne-jimmy Voir le message
    D'accord, je comprends, sauf pour le + dans le dénominateur, je ne sais pas en quoi ça joue, mais c'est sans doute à cause de mes connaissances.
    ça change pas mal de chose si tu veux coder des algo de régression.

    Citation Envoyé par Uranne-jimmy Voir le message
    La modélisation rouge est plus proche de la théorie, et c'est ce qui m'intéresse le plus. La courbe bleu en est par contre très éloigné.
    Tu n'as pas lu ce que j'ai écrit, j'ai mis des valeurs au hazard pour te montrer l'allure de la courbe. A toi d'affiner la courbe avec le logiciel.



    Et encore une fois, si il n'y qu'une partie de la courbe que tu souhaiter modéliser, tu peux supprimer les points inutiles (les premiers 0 et les derniers points après l'asymptote).

  16. #16
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Je suis conscient de faire un travail au dessus de mes connaissances, mais je suis le seul "bioinformaticien" dans une pme de microbiologie, on fait avec les moyens du bords. Heureusement que le forum et là, et pour le coup toi en particulier qui m'aide à comprendre ce que je fais.

    Même avec des valeurs au hasard, le modèle bleu n'a pas d’asymptote en tant que tel, et je doute de pouvoir retrouver à partir du modèle le milieu de l'exponentielle. Après si c'est plus juste, je prends, mais j'ai basé beaucoup de recherche sur un modèle souvent éprouvé.

    Si j'avais pu sortir la phase exponentielle de mes courbes facilement (attention, ce sont des courbes pratiques, avec des artefacts un peu partout, des valeurs fluctuantes et j'en passe, les données que tu as vu sont "faciles"), je l'aurais fait, il m'aurait suffit alors de soustraite les bornes en abscisse pour trouver ce que je cherche, mais ce n'est pas aussi simple.
    Expert en recherche google caféinomane

  17. #17
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Je ne suis pas "bioinformatition" mais quand je vois quelqu'un qui essaye de faire une régression d'un nuage de points avec une fonction qui vraisemblablement ne correspond pas du tout à la forme voulu, je me dit qu'il y a un pb.

    Tu essayes d'imposer bêtement un modèle théorique à des résultats pratiques. Tu ne crois pas être entrain de faire fausse route ?

    ( Après si tu souhaites vraiment coder l'algo, je peux t'aider :p )

  18. #18
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    J'utilise le modèle pour retrouver des informations, sur la partie de la courbe qui m'intéresse, même sur ton schéma, la courbe fit parfaitement
    Je n'ai pas la capacité de faire grand chose de plus, mais je demanderais à mon patron, qui, biologiste de son état (et pas des moindres), pourra m'aiguiller, je le vois aujourd'hui même.

    En tout cas merci également pour les remarques, ça fera avancer les choses quelque soit les choix pris.
    Expert en recherche google caféinomane

Discussions similaires

  1. regression non linéaire
    Par thtghgh dans le forum Mathématiques
    Réponses: 8
    Dernier message: 16/09/2011, 14h49
  2. Regression non linéaire - Prédicteurs
    Par thtghgh dans le forum SAS STAT
    Réponses: 11
    Dernier message: 14/11/2010, 13h04
  3. Regression non linéaire
    Par sfiliste dans le forum Mathématiques
    Réponses: 28
    Dernier message: 28/09/2010, 12h17
  4. Regression non linéaire
    Par DooX4EvEr dans le forum MATLAB
    Réponses: 0
    Dernier message: 11/08/2010, 13h01
  5. Loi de King - Regression non linéaire
    Par damienw dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2008, 21h32

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