gpt4 book ai didi

python - 为什么我无法使用 scipy.optimize.curve_fit 将 sigmoid 函数拟合到此数据?

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:47 29 4
gpt4 key购买 nike

使用下面的代码,我无法将 S 形函数拟合到我的数据集。但是,如果我在下面的代码中添加一个偏移量 t = x + 50 -x0,它就很合适。

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()

最佳答案

您遇到了初始条件敏感性的经典案例。 curve_fit 函数接受关键字参数 p0,它允许您为函数的自由参数选择一个初始“猜测”(在您的例子中,x0ky0)。

当没有提供 p0 时,scipy 假定所有参数 will start at one .对于您的函数,这意味着 sigmoid 的分母将非常接近于零,因此函数值会爆炸。这会混淆求解器并导致糟糕的解决方案。

不幸的是,这个问题没有唯一的解决方案,因为它需要了解您要拟合的函数的动态。在您的情况下,提供 (-30, 1, 0)p0 将使求解器收敛到一个合适的解决方案。

关于python - 为什么我无法使用 scipy.optimize.curve_fit 将 sigmoid 函数拟合到此数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160341/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com