Python >> Tutoriel Python >  >> Python Tag >> SciPy

Ajustement de la courbe sigmoïde Scipy

Vous pouvez définir des limites raisonnables pour les paramètres, par exemple, faire

def fsigmoid(x, a, b):
    return 1.0 / (1.0 + np.exp(-a*(x-b)))

popt, pcov = curve_fit(fsigmoid, xdata, ydata, method='dogbox', bounds=([0., 600.],[0.01, 1200.]))

J'ai une sortie

[7.27380294e-03 1.07431197e+03]

et la courbe ressemble à

Le premier point à (400,0) a été supprimé car inutile. Vous pouvez l'ajouter, même si le résultat ne changera pas grand-chose...

MISE À JOUR

Notez que les limites sont définies comme ([low_a,low_b],[high_a,high_b]), j'ai donc demandé que l'échelle soit entre [0...0.01] et que l'emplacement soit entre [600...1200]


Vous avez peut-être remarqué que l'ajustement résultant est complètement incorrect. Essayez de passer quelques paramètres initiaux décents à curve_fit , avec le p0 argument :

popt, pcov = curve_fit(sigmoid, xdata, ydata, p0=[1000, 0.001])

devrait donner un bien meilleur ajustement, et probablement pas d'avertissement non plus.

(Les paramètres de départ par défaut sont [1, 1] ; c'est trop éloigné des paramètres réels pour obtenir un bon ajustement.)