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

Calcul scientifique Python Discussion :

optimisation avec [scipy.odr]


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut optimisation avec [scipy.odr]
    Bonjour,

    Je cherche a optimiser une fonction avec scipy.odr.

    J'ai un set de donnees (plusieurs courbes de longeurs differentes avec leurs erreurs) qui peuvent etre expliquees avec des modeles (un model par courbe). Ma fonction calcul le model et renvoi la difference entre les donnees et le model

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     x  = array(Ry) # Ry contient mes donnees, et est de dimension 2
    sx = array(Rs) # Rs sont mes erreurs sur les donnees (meme dimension que Ry)
    x0 = array(N*[0.0])
     
    my_data = odr.RealData(x,sx=sx)
    my_model = odr.Model(inv_odr_LR_fct)
     
    myodr = odr.ODR(my_data,my_model,maxit=1,beta0=x0)
    J'ai quelques questions sur le module odr....

    1. dans la documentation, je trouve qu'il faut definir les donnees avec x et y. Quelle est la difference entre x et y ?

    2. Mes donnees sont des courbes de longeur differentes, est-ce que odr est adapte a ce type de donnees ?

    3. Avec le code ci-dessus j'obtiens l'erreur ci-dessous. Est ce que ca veut dire que je dois definir un y ? Mais quoi mettre dedans alors ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "inv_odr_LR.py", line 52, in <module>
        myodr = odr.ODR(my_data,my_model,maxit=1,beta0=x0)
      File "/usr/lib/python2.6/dist-packages/scipy/odr/odrpack.py", line 737, in __init__
        self._check()
      File "/usr/lib/python2.6/dist-packages/scipy/odr/odrpack.py", line 754, in _check
        raise odr_error("an explicit model needs response data")
    odr.odrpack.odr_error: an explicit model needs response data
    J'ai aussi utilise plusieurs modules de [scipy.optimize] tels que [Fmin], [slsqp], [leastsq] et [mpfit] mais le resultat n'est pas bon du tout (l'eccart entre les donnees et le model est bien trop grand).

    J'essaye de convertir un programme matlab qui utilise lsqnonlin et qui marche comme un charme.

    Merci d'avance a tout ceux qui pourrais me donner des petites idees.

  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
    Bonjour,

    Je ne connais pas spécialement le module odr, mais si tu as des courbes cela signifie que tu as des couples de points (x_i,y_i) et que tu cherches a trouver les paramètres de ton modèle qui expliquent le mieux les y_i en fonction des x_i.

    Si Ry c'est juste un tableau de données à une dimension, c'est que x est implicite (par exemple des pas réguliers dans le temps).

    Donc ici, ce que tu a appelé x c'est en fait y.

    Ce type de problème ce résoud typiquement par les moindres carrés et la fonction optimize.leastsq, mais elle n'est pas forcement évidente à utiliser car elle attends une fonction qui retourne un vecteur. Et c'est la sommes des carrés des éléments de ce vecteur qui est minimisée. Pour l'utiliser le principe est donc le suivant :

    Je suppose que ton modèle est une fonction qui dépend de x et d'un jeu de paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    def fit(func,x,y,sy,params0):
        def err(params):
            fx = func(x,params)
            return (fx - y)/sy
     
        p,status = optimize.leastsq(err,params0)
        return p

Discussions similaires

  1. optimisation avec vue dynamique
    Par ljoly dans le forum Oracle
    Réponses: 18
    Dernier message: 28/08/2006, 11h07
  2. Optimisation avec des hints
    Par lenoil dans le forum Oracle
    Réponses: 3
    Dernier message: 22/08/2006, 11h54
  3. [VBA/SQL] optimisation avec un recordset?
    Par herendel dans le forum Access
    Réponses: 1
    Dernier message: 28/04/2006, 19h20
  4. Réponses: 9
    Dernier message: 27/04/2006, 15h02
  5. Optimisation avec le cull facing
    Par jcloupgarou dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/04/2006, 14h52

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