【发布时间】:2018-11-20 00:29:07
【问题描述】:
我有一些数据点,想找到一个拟合函数,我想累积高斯 sigmoid 函数会拟合,但我真的不知道如何实现。
这就是我现在拥有的:
import numpy as np
import pylab
from scipy.optimize import curve_fit
def sigmoid(x, a, b):
y = 1 / (1 + np.exp(-b*(x-a)))
return y
xdata = np.array([400, 600, 800, 1000, 1200, 1400, 1600])
ydata = np.array([0, 0, 0.13, 0.35, 0.75, 0.89, 0.91])
popt, pcov = curve_fit(sigmoid, xdata, ydata)
print(popt)
x = np.linspace(-1, 2000, 50)
y = sigmoid(x, *popt)
pylab.plot(xdata, ydata, 'o', label='data')
pylab.plot(x,y, label='fit')
pylab.ylim(0, 1.05)
pylab.legend(loc='best')
pylab.show()
但我收到以下警告:
.../scipy/optimize/minpack.py:779:OptimizeWarning:无法估计参数的协方差 类别=优化警告)
有人可以帮忙吗? 我也愿意接受任何其他可能性!我只需要以任何方式拟合这些数据的曲线。
【问题讨论】:
-
如果它可能有一些用处,我使用缩放的 Weibull 累积分布“y = Scale * (1.0 - exp(-(x/b)^a)”非常适合所有数据点)" R-Squared = 0.9978 和 RMSE = 0.01423 使用参数 a = 6.4852359831229389E+00, b = 1.1063972566493285E+03, 和 Scale = 9.0659231615116531E-01
-
此发行版的 scipy 文档链接以及相关的拟合细节已从我的评论中删除,因此我无法协助使用 scipy 拟合您的数据 - 这是如何 我导出了这些参数值。我不知道如何在没有删除链接的情况下重现我发布的拟合结果。
标签: python scipy curve-fitting