python - 执行更好的调整 - 使用 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])
谢谢!
解决方案
推荐阅读
- graphql - 尝试使用 apollo-server 的游乐场导致 JSON 输入意外结束
- metaprogramming - Ring2:如何在 RGEnvironment 中迭代类?
- asp.net-core - WSL2 无法访问 PC localhost Kestrel 服务器中的 Web 应用程序
- flutter - 手机屏幕关闭/锁定后 Firestore 删除/设置不起作用
- linux-kernel - MODULE_INFO(srcversion, "HASH_VALUE_HERE") 导致分段错误
- python - 使用机器学习如何将预测与现有信息联系起来
- python - 在发帖前检查用户是否在组中
- javascript - 如何打破 onClick ReactJS 的循环
- kubernetes - kubernetes external-dns 未更新 dns:“HTTP 请求失败:获取 [url]:x509:证书对 [router domain] 有效,而不是 api.cloudflare.com”
- javascript - Node.js 过期网址(googlevideo 重定向)