点击上方关注,All in AI中国
作者:Animesh Agarwal
这篇文章需要线性回归的先验知识。如果你不了解线性回归或需要更新知识,请阅读本系列的前几篇文章。
•使用Python的线性回归
https://towardsdatascience.com/linear-regression-using-python-b136c91bf0a2
•波士顿住房数据集的线性回归
https://towardsdatascience.com/linear-regression-on-boston-housing-dataset-f409b7e4a155
线性回归要求因变量和自变量之间的关系是线性的。如果数据的分布更复杂,如下图所示?该怎么办?线性模型可以用于拟合非线性数据吗?我们如何生成最佳捕获数据的曲线,如下图所示?好吧,我们将在这篇文章中回答这些问题。
目录表
•为何使用多项式回归
•过度拟合VS欠拟合
•偏差与方差权衡
•将多项式回归应用于波士顿住房数据集。
为什么采用多项式回归?
为了理解多项式回归的必要性,让我们先生成一些随机数据集。
生成的数据看起来像
让我们将线性回归模型应用于此数据集。
最佳拟合线的曲线是
我们可以看到直线无法捕获数据中的模式。这是一个欠拟合的例子。计算线性线的RMSE和R2得分给出:
为了克服欠拟合,我们需要增加模型的复杂性。
为了生成更高阶的方程,我们可以将原始特征的功能添加为新特征。
线性模型为
可以转化为
这仍然被认为是线性模型,因为与特征相关联的系数/权重仍然是线性的。X2只是一个特征。然而,我们拟合的曲线本质上是二次曲线。
要将原始要素转换为更高阶的术语,我们将使用scikit-learn提供的PolynomialFeatures类。
接下来,我们使用线性回归训练模型。
生成多项式特征(这里是二次多项式)
我们可以看到,与线性相比,RMSE减少了,R2分数增加了。
如果我们尝试将三次曲线(degree= 3)拟合到数据集,我们可以看到它比二次曲线和线性曲线通过更多的数据点。
三次曲线的指标是
下面是数据集上拟合线性,二次和三次曲线的比较。
如果我们进一步将阶数增加到20,我们可以看到曲线通过更多数据点。下面是3次曲线和20次曲线的比较。
对于degree= 20,模型还捕获数据中的噪声。这是一个过度拟合的例子。即使这个模型传递了大部分数据,它也无法推广看不见的数据。
为了防止过度拟合,我们可以添加更多的训练样本,以便算法不会学习系统中的噪声并且可以变得更加通用。(注意:如果数据本身就是噪声,则添加更多数据可能会成为问题)。
我们如何选择最佳模型?要回答这个问题,我们需要了解偏差与方差的权衡。
偏差与方差的权衡
偏差是指由于模型在拟合数据时的简单假设而导致的误差。高偏差意味着模型无法捕获数据中的模式,这导致欠拟合。
下图总结了我们的学习经历。
从下图可以看出,随着模型复杂度的增加,偏差减小,方差增大,反之亦然在。理想情况下,机器学习模型应具有低方差和低偏差。但实际上两者都不可能。因此,为了实现在训练和看不见的数据上都表现良好的模型,需要进行权衡。
到目前为止,我们已经涵盖了多项式回归背后的大部分理论。现在,让我们在上一篇博客中分析的Boston Housing数据集中实现这些概念。
https://towardsdatascience.com/linear-regression-on-boston-housing-dataset-f409b7e4a155
将多项式回归应用于住房数据集
从下图可以看出,LSTAT与目标变量MEDV具有轻微的非线性变化。在训练模型之前,我们将原始特征转换为更高次多项式
让我们定义一个函数,它将原始特征转换为给定度数的多项式特征,然后对其应用线性回归。
接下来,我们将阶数调为2的上述函数。
使用多项式回归的模型的性能:
这比我们在之前的博客中使用线性回归所获得的要好。
这就是这个故事的全部内容。这个Github库包含了这个博客的所有代码,可以在这里找到用于波士顿住房数据集的完整Jupyter笔记本。
https://github.com/animesh-agarwal/Machine-Learning-Datasets/blob/master/boston-housing/Polynomial_Regression.ipynb
结论
在本机器学习系列中,我们介绍了线性回归、多项式回归,并在Boston Housing数据集上实现了这两个模型。