首页 > 解决方案 > 执行更好的调整 - 使用 python 进行非线性回归

问题描述

我有一些信息,根据日期(x 轴)而有所不同,我想以更好的方式对其进行调整。我使用了 scipy.optimize.curve_fit 并且它非常适合以下功能,但我想以更好的方式调整它。

多项式形式对我来说没有用或不精确,因为 Y 轴值是累积的,所以曲线不太可能下降。

有人可以帮我看看我可以添加到函数中以使其更适合吗?

这是我使用的数据,以及带有参数值的公式。

>>> X
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
       35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
       52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66])
>>> y
array([  1,   1,   1,   1,   1,   1,   2,   2,   4,  15,  17,  38,  46,
        53,  61,  75, 100, 111, 133, 142, 152, 159, 170, 174, 179, 182,
       188, 190, 192, 196, 198, 199, 202, 205, 207, 214, 215, 216, 218,
       224, 229, 231, 233, 236, 236, 236, 237, 237, 237, 237, 237, 237,
       237, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239,
       243]) 

>>> def func(x,a,b):
    return a*np.exp(b/x)

>>> popt,pcov=curve_fit(func,X,y)
>>> a=popt[0]
>>> b=popt[1]
>>> yvals=func(X,a,b)
>>> plot1=plt.plot(X,y,'*',label='original values')
>>> plot2=plt.plot(X,yvals,'r',label='curve_fit values')
>>> plt.show()
>>> popt
array([357.97373884, -20.60549425])

曲线拟合图

谢谢!

标签: pythonnumpyscipy

解决方案


推荐阅读