python - 使用 SciPy 曲线拟合指数函数

标签 python scipy curve-fitting

我有以下“分数”函数,这意味着为特定测量给出 0 到 1 之间的分数,看起来像:

def func(x, a, b):
    return 1.0/(1.0+np.exp(-b*(x-a)))

我想让它适合以下 x 和 y daya:

x = np.array([4000, 2500, 2000, 1000,  500])
y = np.array([ 0.1,  0.3,  0.5,  0.7,  0.9])

但是 curve_fit 似乎不起作用:

popt, pcov = curve_fit(func, x, y)

enter image description here 当我尝试用线性函数拟合它时 curve_fit 给出了一个很好的拟合(绿线),但是上面的指数函数只给出了 a=1b=1,这不太合适。一个好的拟合应该是 a=1800b=-0.001667,它给出了红线(蓝色数据)。

最佳答案

原因很可能是没有指定起始条件。如果你给它一些合理的数字,那么 curve_fit 更有可能会收敛。下面是一个具有一些合理起始条件的示例:

from scipy.optimize import curve_fit

def func(x, a, b):
    return 1.0/(1.0+np.exp(-b*(x-a)))

x = np.array([4000., 2500., 2000., 1000.,  500.])
y = np.array([ 0.1,  0.3,  0.5,  0.7,  0.9])

popt, pcov = curve_fit(func, x, y, p0=[2000., 0.005])

plot(x, y, 'x')
xx = linspace(0, 4000, 100)
yy = func(xx, *popt)
plot(xx, yy, lw=5)

enter image description here

关于python - 使用 SciPy 曲线拟合指数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42387896/

相关文章:

python - 优化单变量函数时,将雅可比传递给 scipy.optimize.fsolve

python - curve_fit 未优化参数之一

python - 为什么 scipy.optimize.curve_fit() 在拟合函数中使用定义数量的参数时表现更好?

c++ - 使用 L1 范数的多项式拟合

python - 如何从python中的cmd输入中提取文件名

Python Matplotlib FuncAnimation + 保存

python - 动画+在矩阵之间平滑插值

python - 图像中棘手的填充孔

python - django - 模板中的列表列表

python - 向 Dask 分布式集群提交任务时本地 python 文件导入问题