在Python中实现多项式回归
本文将浅谈多项式回归,以及我们如何使用Python将其应用于真实世界的数据。
首先,我们将了解什么是回归以及它与多项式回归有什么不同。然后,我们将看到我们特别需要多项式回归的情况。
我们将看到旁边的多个编程实例,以便更好地理解这个概念。
回归的定义
回归是一种统计方法,用于确定自变量或特征与因变量或结果之间的关系。在机器学习中,它被用作预测性建模的方法,其中采用一种算法来预测连续结果。
在有监督的机器学习中,回归问题的解决是机器学习模型中最常见的应用之一。
我们训练算法来寻找一个因变量和一个自变量之间的关系,以根据一些未见的输入数据集来预测一些结果。
回归模型主要用于预测分析模型,其中应用程序需要根据一些输入数据或历史数据来预测未来数据。例如,企业可以使用回归分析,根据当前的销售数据预测下个月的销售额。
医疗公司可以使用回归模型来预测一定时期内公众的健康趋势。回归技术的典型用途是:
- 预测连续的结果,如房产价值、股票价格或销售;
- 预测未来零售业或营销活动的表现,以最大限度地利用资源;
- 预测客户或用户模式,如流媒体服务或购物网站;
- 分析数据集以弄清变量和输出的关系;
- 根据各种因素预测利率和股票价格;
- 创建时间序列的可视化。
回归的类型
有许多回归技术,但主要是将这些技术分为三个主要类别:
- 简单线性回归
- Logistic回归
- 多重线性回归
简单线性回归
简单线性回归是一种线性回归方法,在数据点内绘制一条直线,以最小化直线和数据点之间的误差。它是机器学习回归的最基本和最直接的形式之一。
在这种情况下,自变量和因变量被认为具有线性关系。
Logistic回归
当因变量只能有两个值时,true
或false
,或yes
或no
,就利用了逻辑回归。使用逻辑回归模型可以预测因变量发生的机会。
在大多数情况下,输出值必须是二进制的。因变量和自变量之间的关系可以用一个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()
输出:
现在,我们将使用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()
输出:
在上面的例子中,我们使用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))
现在,我们将指定如何显示这条直线。在我们的例子中,我们从10
到220
。
linesp = numpy.linspace(10, 220, 100)
最后三行代码是用来画图的,然后是回归线,最后是显示图。
plot.scatter(xAxis, yAxis)
plot.plot(linesp, model(linesp))
plot.show()
x轴和y轴之间的关系
了解轴(x
和y
)之间的关系至关重要,因为如果它们之间没有关系,就不可能预测未来的数值或回归的结果。
我们将计算一个名为R-Squared
的数值来衡量这种关系。它的范围从0
到1
,其中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
的值显示了x
和y
之间的强关系。
如果该值很低,说明关系很弱。此外,它表明这个数据集不适合做多项式回归。