使用下面的代碼我無法將sigmoid函數擬合到我的數據集中。 但是,如果我在下面的代碼中添加一個偏移量t = x + 50 -x0
,它很合適。爲什麼我無法使用scipy.optimize.curve_fit將sigmoid函數適用於此數據?
不應該x0
照顧接頭?
import numpy as np
import pylab
from scipy.optimize import curve_fit
listA = np.array([-110,-105,-100,-95,-90,-85,-80,-75,-70,-65,-60,-55,-50,-45])
listB = np.array([1,1,1,1,0.926470588,0.852941176,0.616803279,0.371212121,
0.191066998,0.088565022,0.06684492,0.019855596,0.015517241,0])
def sigmoid(x,x0,k,y0):
t = x -x0
y = y0-1/(1 + np.exp(-k*t))
return y
popt, pcov = curve_fit(sigmoid, listA, listB)
print popt ,pcov
x = np.linspace(-110,-45,50)
y = sigmoid(x, *popt)
pylab.plot(listA, listB, 'o', label='data')
pylab.plot(x,y, label='fit')
pylab.ylim(-0.05, 1.05)
pylab.legend(loc='best')
pylab.show()
感謝perimosocordiae ......有道理..是否有R-square或迴歸scoe輸出,我可以從curve_fit得到這將幫助我猜這樣的問題.... – vivekbecks 2015-01-27 00:14:38
雖然'p0'的假設不正確,但會導致錯誤分析。但是,您的陳述「初始條件敏感性的經典案例」爲真,以及您的最後一段。 – 2015-01-27 00:18:19
@vivekbecks是的,總是檢查'pcov'的值。如果它是'inf',則出現問題。 – 2015-01-27 00:19:51