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 d'une fonction, fonction beta et hypergeometrique


Sujet :

Calcul scientifique Python

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Par défaut optimisation d'une fonction, fonction beta et hypergeometrique
    Bonjour,

    Je suis débutante sous python (et en programmation) et j'ai des problèmes pour maximiser une fonction de vraisemblance:

    - J'arrive à calculer ma fonction quand je lui donne une valeur de paramètre.
    - Si je fais varier la valeur de mon paramètre je trouve un maximum pour ma fonction que je peux visualiser sur une courbe.

    Cependant quand j'essaie d'utiliser les fonctions d'optimisation de scipy (ex: la fonction fmin_cobyla), une erreur m'est renvoyée:

    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
     
    >>> gg=array([0.5])    # valeur initiale du paramètre
    >>> def constr1(x):    #  veut m >= 0
                  return x
     
     >>> def constr2(x):    # et m =< 1
                   return 1-x
     
    >>> fmin_cobyla(pnn, gg, [constr1, constr2], rhoend=1e-7)  
     
    capi_return is NULL
    Call-back cb_calcfc_in__cobyla__user__routines failed.
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.6/dist-packages/scipy/optimize/cobyla.py", line 96, in fmin_cobyla
        iprint=iprint, maxfun=maxfun)
      File "/usr/lib/python2.6/dist-packages/scipy/optimize/cobyla.py", line 88, in calcfc
        f = func(x, *args)
      File "<stdin>", line 13, in pnn
      File "/usr/lib/pymodules/python2.6/mpmath/functions/hypergeometric.py", line 249, in hyp2f1
        return ctx.hyper([a,b],[c],z,**kwargs)
      File "/usr/lib/pymodules/python2.6/mpmath/functions/hypergeometric.py", line 198, in hyper
        z = ctx.convert(z)
      File "/usr/lib/pymodules/python2.6/mpmath/ctx_mp_python.py", line 654, in convert
        return ctx._convert_fallback(x, strings)
      File "/usr/lib/pymodules/python2.6/mpmath/ctx_mp.py", line 544, in _convert_fallback
        raise TypeError("cannot create mpf from " + repr(x))
    TypeError: cannot create mpf from array([ 1.])
    Je crois comprendre que cette erreur est liée à l'appel de la fonction hypergéométrique (hyp2f1, du module scipy) dans le calcul de ma fonction de vraisemblance mais je ne sais pas quoi faire (surtout que ma fonction marche très bien en dehors d'une fonction d'optimisation).

    Voici la partie de ma fonction de vraisemblance dans laquelle je fais appel à la fonction hypergéométrique et à la fonction beta (aussi une fonction du module scipy et qui me renvoie le même type d'erreur):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def pnn(m):
       eta= w*((1-m+xesp*(w-1))/(1-m*w+xesp*(w-1)))
       lambd=((J-1)*m*xesp)/(1-m+xesp*(w-1))
       xi=1+(((J-1)*(1-xesp*w*m+xesp*(w-1)))/(1-w*m+xesp*(w-1)))
       Z=1/(hyp2f1(-J,lambd,1-xi,eta))        # fonction hypergéométrique                   
       betacalc=beta(lambd+nesp,xi-nesp)/beta(lambd,xi)   # fonction beta
     
     ...
       finall=Z*betacalc*(eta**nesp)*pochham*pochham2
       return -finall
    Je veux m compris entre 0 et 1 (bornes définies dans les fonctions "constr") et j'ai pris par exemple : w=1, xesp=0.02, J=400

    Par ailleurs sans les lignes betacalc et Z dans la fonction pnn, l'optimisation fonctionne avec fmin et fmin_cobyla.

    Est-ce que quelqu'un peut m'aider?

    (je travaille sous Linux et sous la version 2.6.6 de Python)

    Merci d'avance!

  2. #2
    Membre chevronné Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Par défaut
    si tu veux il y a une mailing liste des utilisateurs de scipy,
    tu auras peut-être plus de chances que sur le forum

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Par défaut
    oui c'est vrai je vais poster un message, merci pour le conseil.

    En fait j'ai compris (enfin je crois) que dans les fonctions d'optimisation de scipy je fais appel aux fonctions bêta et hypergéométrique du module mpmath (et non pas du module scipy comme je pensais) et le type mpf n'est pas reconnu dans ces fonctions...
    Sauf que quand j'utilise les fonctions spéciales de scipy, le calcul de hyp2f1 me renvoie "nan"...

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

Discussions similaires

  1. Optimisation d'une petite fonction très importante
    Par reacen dans le forum Général Java
    Réponses: 19
    Dernier message: 26/05/2011, 10h16
  2. Optimisation d'une fonction non convexe
    Par Kevin_18 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 06/08/2008, 09h40
  3. Optimisation d'une fonction de découpage en sous-chaine
    Par FabaCoeur dans le forum Général Java
    Réponses: 9
    Dernier message: 05/01/2008, 14h00
  4. Optimisation d'une fonction
    Par BNS dans le forum C++
    Réponses: 7
    Dernier message: 15/12/2007, 22h25
  5. Réponses: 6
    Dernier message: 27/06/2007, 16h44

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