gpt4 book ai didi

python-3.x - 使用 Python 将 sigmoid 函数 ("S"形状曲线)拟合到数据

转载 作者:行者123 更新时间:2023-12-04 11:08:01 26 4
gpt4 key购买 nike

我正在尝试将 sigmoid 函数拟合到我拥有的一些数据中,但我不断收到:ValueError: Unable to determine number of fit parameters.
我的数据如下所示:

enter image description here

我的代码是:

from scipy.optimize import curve_fit

def sigmoid(x):
return (1/(1+np.exp(-x)))

popt, pcov = curve_fit(sigmoid, xdata, ydata, method='dogbox')

然后我得到:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-78540a3a23df> in <module>
2 return (1/(1+np.exp(-x)))
3
----> 4 popt, pcov = curve_fit(sigmoid, xdata, ydata, method='dogbox')

~\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in curve_fit(f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs)
685 args, varargs, varkw, defaults = _getargspec(f)
686 if len(args) < 2:
--> 687 raise ValueError("Unable to determine number of fit parameters.")
688 n = len(args) - 1
689 else:

ValueError: Unable to determine number of fit parameters.

我不确定为什么这不起作用,这似乎是一个微不足道的 Action --> 将曲线拟合到某个点。所需的曲线如下所示:

enter image description here

对不起图形......我是在PowerPoint中做的......

如何找到最佳的 sigmoid(“S”形)曲线?

更新

感谢@Brenlla,我将代码更改为:
def sigmoid(k,x,x0):
return (1 / (1 + np.exp(-k*(x-x0))))

popt, pcov = curve_fit(sigmoid, xdata, ydata, method='dogbox')

现在我没有收到错误消息,但曲线并不理想:
x = np.linspace(0, 1600, 1000)
y = sigmoid(x, *popt)

plt.plot(xdata, ydata, 'o', label='data')
plt.plot(x,y, label='fit')
plt.ylim(0, 1.3)
plt.legend(loc='best')

结果是:

enter image description here

我该如何改进它才能更好地拟合数据?

更新2

现在的代码是:
def sigmoid(x, L,x0, k, b):
y = L / (1 + np.exp(-k*(x-x0)))+b

但结果还是...

enter image description here

更新3

在@Brenlla 的大力帮助下,代码修改为:
def sigmoid(x, L ,x0, k, b):
y = L / (1 + np.exp(-k*(x-x0)))+b
return (y)

p0 = [max(ydata), np.median(xdata),1,min(ydata)] # this is an mandatory initial guess

popt, pcov = curve_fit(sigmoid, xdata, ydata,p0, method='dogbox')

结果:

enter image description here

最佳答案

在@Brenlla 的大力帮助下,代码修改为:

def sigmoid(x, L ,x0, k, b):
y = L / (1 + np.exp(-k*(x-x0)))+b
return (y)

p0 = [max(ydata), np.median(xdata),1,min(ydata)] # this is an mandatory initial guess

popt, pcov = curve_fit(sigmoid, xdata, ydata,p0, method='dogbox')

结果:

enter image description here

关于python-3.x - 使用 Python 将 sigmoid 函数 ("S"形状曲线)拟合到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55725139/

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