轻松玩转 Scikit-Learn 系列 —— 多项式回归 !

简介: 上次刚和小伙伴们学习过 PCA,PCA 主要用来降低数据特征空间的维度,以达到方便处理数据,减小计算开销,和数据降噪提高模型准确率的目的。

上次刚和小伙伴们学习过 PCA,PCA 主要用来降低数据特征空间的维度,以达到方便处理数据,减小计算开销,和数据降噪提高模型准确率的目的。


而这节我们要一起看的多项式回归,它为了提高模型预测的准确率恰恰做了一件相反的事情。多项式回归的基本思想是:以线性回归为基础,拓展数据集特征空间的维度,且被拓展的特征空间维度上的数据是给定数据集相关项的多项式项。


下面我们举个小栗子,来引入我们今天的主角。

0.jpg1.jpg


模拟一个简单的多项式回归:

2.jpg3.jpg4.jpg


在上例中,我们给一个二次曲线的拟合数据加上一些噪音来产生一个数据集,然后实例化一个线性回归模型,去拟合出一条直线,结果可想而知,你用一个线性模型去拟合二次数据点准确率肯定不高。接着,我们在原始数据上手动添加了一维,且第二维数据是第一维数据的平方,然后我们再次实例化一个线性回归模型,这次拟合出了一条曲线,就没那么辣眼睛了吧。下面我们使用 scikit-learn 中包装好的多项式回归在试验下。


scikit-learn 中的多项式回归与 Pipeline

使用多项式回归时,由于拓展的维度是已给定维度的多项式项,而多项式的高次操作可能会导致数据之间的量级差异加剧,所以,对已经进行过多项式操作的数据进行归一化操作也是十分必要的,然后我们再使用回归模型进行预测,以得到准确度更高的模型。


为了简化这个过程,个人墙裂推荐使用 scikit-learn 中的 Pipeline 将这三个模型封装起来串联操作,让模型接口更加简洁,使用起来也更加的优雅。接下来是使用手工制作数据集使用 scikit-learn 中的内封模型进行的代码演示。

5.jpg


为方便调用,使用 Pipeline 封装了一个多项式回归函数,函数 PolynomialRegression() 中传入的超参数 degree 是用来指定所得的多项式回归中所用多项式的阶次。

6.jpg7.jpg


为了产生过拟合的效果,令 degree=100, 有些夸张 。

8.jpg9.jpg


模型泛化

一般情况下,我们并不知道我们所研究的数据的分布规律,所以说在使用多项式回归的时候也很难直接给出符合数据潜在规律的次幂,当我们指定的 degree 过低时,当然会直接从预测的准确率直接反映出来,但是当超参数 degree 过高时,就经常会呈现出上图所示的过拟合现象,这时,我们可以通过模型泛化来解决这个问题。


常用的用于解决模型过拟合问题的泛化回归模型有岭回归和 LASSO 回归,这两种回归都是在原来回归模型的损失函数中添加上对应特征系数的相关项,岭回归使用了各个系数的平方和:

10.jpg

而 LASSO 回归是各项系数绝对值之和:

11.jpg

alpha 是岭回归和 LASSO 回归正则项前一项重要的可调整的超参数,下图显示了 alpha 的变化对训练所得模型权重的影响(注意alpha在下图中的横轴上是逐渐变小的),可以看出超参数 alpha 对训练得到的模型参数的影响还是挺大的,随着 alpha 的增大,模型参数的模值被压缩到一个更小的范围之内。

12.jpg


那么接下来我们就从 scikit-learn 中引入岭回归和 LASSO 回归模型,并将其实例化,看看他们的模型泛化能力到底如何:

13.jpg14.jpg


上面我们已经训练了一个岭回归,并在图中绘出数据点及其拟合的曲线,下面我们在实例化一个LASSO回归模型,并绘出相应的数据点和曲线:

15.jpg16.jpg


同样是最高次幂为100的多项式回归模型,添加了 L1和L2 正则的岭回归和 LASSO 回归相比线性回归的曲线缓和了不少,极大程度的缓解了模型的过拟合,通过调整超参数 alpha,还能得到更准确地模型。


相关文章
|
8天前
|
机器学习/深度学习 数据采集 Python
Python机器学习面试:Scikit-learn基础与实践
【4月更文挑战第16天】本文探讨了Python机器学习面试中Scikit-learn的相关重点,包括数据预处理(特征缩放、缺失值处理、特征选择)、模型训练与评估、超参数调优(网格搜索、随机搜索)以及集成学习(Bagging、Boosting、Stacking)。同时,指出了常见错误及避免策略,如忽视数据预处理、盲目追求高精度、滥用集成学习等。掌握这些知识点和代码示例,能帮助你在面试中展现优秀的Scikit-learn技能。
37 5
|
8天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】使用Scikit-learn进行数据编码
【4月更文挑战第30天】本文介绍了Python Scikit-learn库在机器学习数据预处理中的作用,尤其是数据编码。数据编码将原始数据转化为算法可理解的格式,包括标签编码(适用于有序分类变量)、独热编码(适用于无序分类变量)和文本编码(如词袋模型、TF-IDF)。Scikit-learn提供LabelEncoder和OneHotEncoder类实现这些编码。示例展示了如何对数据进行标签编码和独热编码,强调了正确选择编码方法的重要性。
|
8天前
|
机器学习/深度学习 算法 数据挖掘
机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧
机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧
|
8天前
|
机器学习/深度学习 人工智能 算法
|
8天前
|
机器学习/深度学习 存储 数据可视化
数据分享|Python在Scikit-Learn可视化随机森林中的决策树分析房价数据
数据分享|Python在Scikit-Learn可视化随机森林中的决策树分析房价数据
|
8天前
|
机器学习/深度学习 数据采集 供应链
从数据到决策:scikit-learn在业务分析中的应用
【4月更文挑战第17天】本文探讨了scikit-learn在业务分析中的应用,包括数据预处理、分类、回归和聚类模型的构建,以及模型评估与优化。通过使用scikit-learn,企业能有效处理数据、预测趋势、客户细分并制定决策,从而提升经营效率和市场策略。随着机器学习的发展,scikit-learn在业务分析领域的潜力将持续释放,创造更多价值。
|
8天前
|
机器学习/深度学习
模型选择与调优:scikit-learn中的交叉验证与网格搜索
【4月更文挑战第17天】在机器学习中,模型选择和调优至关重要,scikit-learn提供了交叉验证和网格搜索工具。交叉验证(如k折、留一法和分层k折)用于评估模型性能和参数调优。网格搜索(如GridSearchCV和RandomizedSearchCV)遍历或随机选择参数组合以找到最优设置。通过实例展示了如何使用GridSearchCV对随机森林模型进行调优,强调了理解问题和数据的重要性。
|
8天前
|
机器学习/深度学习 算法
scikit-learn在回归问题中的应用与优化
【4月更文挑战第17天】本文探讨了scikit-learn在回归问题中的应用,介绍了线性回归、岭回归、SVR和决策树回归等算法,并提出优化策略,包括特征选择、超参数调优、交叉验证和集成学习。通过实践案例展示如何处理房价预测问题,强调了根据问题特点选择合适方法的重要性。
|
8天前
|
数据采集 机器学习/深度学习 算法
scikit-learn中的数据预处理:从清洗到转换
【4月更文挑战第17天】在机器学习中,scikit-learn是用于数据预处理的强大Python库,涵盖数据清洗和转换。数据清洗涉及处理缺失值(如使用SimpleImputer和IterativeImputer填充)和异常值,以及分类数据的编码(如标签编码和独热编码)。数据转换包括特征缩放(如StandardScaler和MinMaxScaler)和特征选择(过滤、包装和嵌入方法)。这些工具能提升数据质量,优化模型性能,但需根据具体问题选择合适方法。
|
8天前
|
机器学习/深度学习 数据采集 算法
scikit-learn入门指南:从基础到实践
【4月更文挑战第17天】这篇指南介绍了scikit-learn,一个Python数据分析和机器学习的重要库。内容涵盖安装、数据加载与预处理、模型训练(如KNN分类器)、评估、调参优化及高级应用,如降维和聚类。通过实例展示了scikit-learn在分类任务中的使用,强调其在数据科学中的重要性。要深入了解,可参考官方文档和实践案例。