使用下面的代码我无法将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