2017-05-29 6 views
0

Lorsque je tente de lancer:Scipy Optimize erreur Curve_fit pour limites

bet = (nu[minimum],10**4,3000,0,0,5000) # Array of initial bet parameters 
bound = ((nu[0],nu[len(nu)-1]),(10**3,10**6),(-np.inf,np.inf),(-np.inf,np.inf),(-np.inf,np.inf),(-np.inf,np.inf)) 
popt,pcov = curve_fit(S_21,x,y, p0=bet, bounds = bound) 

TypeError: leastsq() got an unexpected keyword argument 'bounds'

Quel est le problème? J'utilise Python 3.4.4 sous Windows.

+1

L'argument 'bounds' a été ajouté dans la version scipy 0,17. Quelle version utilisez-vous? Vérifiez avec 'import scipy; print (scipy .__ version __) '. –

Répondre

0

scipy.optimize.leastsq ne prend pas en charge les limites et a été utilisé par curve_fit jusqu'à la version scipy 0.17. OTOH, scipy.optimize.least_squares (qui est utilisé par curve_fit dans les versions plus récentes de scipy) peut prendre en charge les limites, mais pas lors de l'utilisation de la méthode lm (Levenberg-Marquardt), car il s'agit d'un wrapper simple autour de scipy.optimize.leastsq. C'est un peu confus. Permettez-moi de vous recommander d'essayer lmfit (http://lmfit.github.io/lmfit-py/) qui supporte les bornes sur tous les paramètres, et qui facilite la correction/modification des paramètres sans avoir à modifier la fonction du modèle. Lmfit a une approche pratique de l'ajustement des courbes avec sa classe Model, et un bon nombre d'outils pour explorer les intervalles de confiance des paramètres.

0

une autre solution qui a fonctionné pour moi dans les versions de scipy en dessous de 0.17 (essayé en 0.14 et 0.15) est de dire à leastsq de faire plus d'appels à func (mais cela dépend de la vitesse de convergence de votre func).

Par exemple, vous pouvez essayer:

popt,pcov = curve_fit(S_21,x,y, p0=bet, maxfev=10000)