使用Python创建非线性回归

2024-06-28 19:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的数据

x = numpy.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])


y = numpy.array([2149,2731,3397,
                 3088,2928,2108,
                 1200,659,289,
                 1141,1726,2910,
                 4410,5213,5851,
                 5817,5307,4314,
                 3656,3081,3103,
                 3535,4512,5584])

我可以创建线性回归并用此代码进行猜测:

z = numpy.polyfit(x, y, 1)
p = numpy.poly1d(z)

但我想创建这个数据的非线性回归,并用如下代码绘制图表:

import matplotlib.pyplot as plt
xp1 = numpy.linspace(1,24,100)
plt.plot(x, y, 'r--', xp1, p(xp1))
plt.show()

我看到了这样的代码,但这帮不了我:

def func(x, a, b, c):
    return a*np.exp(-b*x) + c
...
popt, pcov = curve_fit(func, x, y)
...

那么做非线性回归的代码是什么,我能用非线性方程做些什么猜测呢?


Tags: 数据代码importnumpymatplotlib图表绘制plt
1条回答
网友
1楼 · 发布于 2024-06-28 19:56:44

你指的是scipy模块。你说得对,这可能是你想要使用的模块。

然后,您感兴趣的是curve_fit(func, x, y)如何工作。其思想是,您希望最小化某些函数模型(例如y = m*x + b对于一行)与模型上的点之间的差异。参数func表示此模型:您正在使一个函数将模型的因变量(在我的示例中为x)作为其第一个参数,并为所有后续参数设置模型的参数(在线性模型中为mb)。你已经发现了xy

但真正的问题是,是的,我意识到我没有回答你的问题,你需要为你的数据手工计算出某种模型(至少是模型的类型:指数、线性、多项式等)。这是很难摆脱的。从你的数据来看,尽管我想找一个表格的模型

y = a*sin(b*x + c) + d*x + e

或者5次多项式。

相关问题 更多 >