在Python中实现多项式回归

本文将浅谈多项式回归,以及我们如何使用Python将其应用于真实世界的数据。

首先,我们将了解什么是回归以及它与多项式回归有什么不同。然后,我们将看到我们特别需要多项式回归的情况。

我们将看到旁边的多个编程实例,以便更好地理解这个概念。

回归的定义

回归是一种统计方法,用于确定自变量或特征与因变量或结果之间的关系。在机器学习中,它被用作预测性建模的方法,其中采用一种算法来预测连续结果。

在有监督的机器学习中,回归问题的解决是机器学习模型中最常见的应用之一。

我们训练算法来寻找一个因变量和一个自变量之间的关系,以根据一些未见的输入数据集来预测一些结果。

回归模型主要用于预测分析模型,其中应用程序需要根据一些输入数据或历史数据来预测未来数据。例如,企业可以使用回归分析,根据当前的销售数据预测下个月的销售额。

医疗公司可以使用回归模型来预测一定时期内公众的健康趋势。回归技术的典型用途是:

  1. 预测连续的结果,如房产价值、股票价格或销售;
  2. 预测未来零售业或营销活动的表现,以最大限度地利用资源;
  3. 预测客户或用户模式,如流媒体服务或购物网站;
  4. 分析数据集以弄清变量和输出的关系;
  5. 根据各种因素预测利率和股票价格;
  6. 创建时间序列的可视化。

回归的类型

有许多回归技术,但主要是将这些技术分为三个主要类别:

  1. 简单线性回归
  2. Logistic回归
  3. 多重线性回归

简单线性回归

简单线性回归是一种线性回归方法,在数据点内绘制一条直线,以最小化直线和数据点之间的误差。它是机器学习回归的最基本和最直接的形式之一。

在这种情况下,自变量和因变量被认为具有线性关系。

Logistic回归

当因变量只能有两个值时,truefalse ,或yesno ,就利用了逻辑回归。使用逻辑回归模型可以预测因变量发生的机会。

在大多数情况下,输出值必须是二进制的。因变量和自变量之间的关系可以用一个sigmoid曲线来映射。

多重线性回归

多重线性回归是在采用一个以上的自变量时使用的。多重线性回归技术包括多项式回归。

当有许多自变量时,就是多元线性回归。当存在众多自变量时,它比基本线性回归实现了更好的拟合。

当以二维方式显示时,其结果是一条符合数据点的曲线。

在简单回归中,我们用下面的公式用一个自变量的值来寻找一个因变量的值:

$$
y = a+bx+c
$$

其中:

  • y 是因变量
  • a 是Y截距
  • b 是斜率
  • c 是误差率

在许多情况下,如果自变量不止一个,线性回归就不能给出完美的结果,为此需要进行多项式回归,其公式为:、

$$
y = a_0 + a_1x_1 + a_2x_2^2 + …..+ a_nx_n^n
$$

我们可以看到,y 是对x 的因变量。

这个多项式的度数应该有最佳值,因为较高的度数会过度拟合数据。度数越低,模型就越不符合结果。

在Python中实现多项式回归

Python包括确定数据点之间的联系和绘制多项式回归线的函数。我们将不复述数学公式,而是向你展示如何使用这些策略。

在下面的例子中,18辆汽车在通过一个收费站时被登记。我们记录了汽车的速度和它经过我们时的时间(小时)。

一天中的时间在xAxis ,速度在yAxis

import matplotlib.pyplot as plot
xAxis = [10,20,30,50,60,70,80,90,100,120,130,140,150,160,180,190,210,220]
yAxis= [96,95,84,65,60,59,65,55,71,75,78,86,88,79,95,98,99,100]
plot.scatter(xAxis, yAxis)
plot.show()

输出:

在Python中实现多项式回归

现在,我们将使用NumPy和Matplotlib绘制多项式回归图。

import numpy
import matplotlib.pyplot as plot
xAxis = [10,20,30,50,60,70,80,90,100,120,130,140,150,160,180,190,210,220]
yAxis= [96,95,84,65,60,59,65,55,71,75,78,86,88,79,95,98,99,100]
model = numpy.poly1d(numpy.polyfit(xAxis, yAxis, 3))
linesp = numpy.linspace(10, 220, 100)
plot.scatter(xAxis, yAxis)
plot.plot(linesp, model(linesp))
plot.show()

输出:

在Python中实现多项式回归

在上面的例子中,我们使用NumPy和Matplotlib库,通过使用import 语句来绘制多项式回归。之后,我们为x轴和y轴创建了数组,如:

xAxis = [10,20,30,50,60,70,80,90,100,120,130,140,150,160,180,190,210,220]
yAxis= [96,95,84,65,60,59,65,55,71,75,78,86,88,79,95,98,99,100]

现在,我们已经使用了NumPy库中的一种方法来制作多项式模型,如:

model = numpy.poly1d(numpy.polyfit(xAxis, yAxis, 3))

现在,我们将指定如何显示这条直线。在我们的例子中,我们从10220

linesp = numpy.linspace(10, 220, 100)

最后三行代码是用来画图的,然后是回归线,最后是显示图。

plot.scatter(xAxis, yAxis)
plot.plot(linesp, model(linesp))
plot.show()

x轴和y轴之间的关系

了解轴(xy)之间的关系至关重要,因为如果它们之间没有关系,就不可能预测未来的数值或回归的结果。

我们将计算一个名为R-Squared 的数值来衡量这种关系。它的范围从01 ,其中0 表示没有关系,而1 表示100%相关。

import numpy
import matplotlib.pyplot as plot
from sklearn.metrics import r2_score
xAxis = [10,20,30,50,60,70,80,90,100,120,130,140,150,160,180,190,210,220]
yAxis= [96,95,84,65,60,59,65,55,71,75,78,86,88,79,95,98,99,100]
model = numpy.poly1d(numpy.polyfit(xAxis, yAxis, 3))
print(r2_score(yAxis, model(xAxis)))

输出:

0.9047652736246418

0.9 的值显示了xy 之间的强关系。

如果该值很低,说明关系很弱。此外,它表明这个数据集不适合做多项式回归。