轻松玩转 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,还能得到更准确地模型。


相关文章
|
10天前
|
机器学习/深度学习 算法 数据挖掘
|
12天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
28天前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
17 3
|
14天前
|
机器学习/深度学习 运维 数据挖掘
scikit-learn 1.0 版本重要新特性一览
scikit-learn 1.0 版本重要新特性一览
|
15天前
|
机器学习/深度学习 数据挖掘 Python
简单几步,教你使用scikit-learn做分类和回归预测
简单几步,教你使用scikit-learn做分类和回归预测
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
智能决策新引擎:Python+Scikit-learn,打造高效数据分析与机器学习解决方案!
【7月更文挑战第26天】在数据驱动时代,企业需从大数据中提取价值以精准决策。Python凭借丰富的库成为数据分析利器,而Scikit-learn作为核心工具备受青睐。本文通过电商案例展示如何预测潜在买家以实施精准营销。首先进行数据预处理,包括清洗、特征选择与转换;接着采用逻辑回归模型进行训练与预测;最后评估模型并优化。此方案显著提升了营销效率和企业决策能力,预示着智能决策系统的广阔前景。
54 2
|
2月前
|
机器学习/深度学习 数据采集 算法
数据海洋中的导航者:Scikit-learn库引领Python数据分析与机器学习新航向!
【7月更文挑战第26天】在数据的海洋里,Python以强大的生态成为探索者的首选,尤其Scikit-learn库(简称sklearn),作为一颗璀璨明珠,以高效、灵活、易用的特性引领数据科学家们破浪前行。无论新手还是专家,sklearn提供的广泛算法与工具支持从数据预处理到模型评估的全流程。秉承“简单有效”的设计哲学,它简化了复杂模型的操作,如线性回归等,使用户能轻松比较并选择最优方案。示例代码展示了如何简洁地实现线性回归分析,彰显了sklearn的强大能力。总之,sklearn不仅是数据科学家的利器,也是推动行业进步的关键力量。
41 3
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
深入Scikit-learn:掌握Python最强大的机器学习库
【7月更文第18天】在当今数据驱动的世界中,机器学习已成为解锁数据潜力的关键。Python凭借其简洁的语法和丰富的库生态,成为数据科学家和机器学习工程师的首选语言。而在Python的众多机器学习库中,Scikit-learn以其全面、高效、易用的特点,被誉为机器学习领域的“瑞士军刀”。本文旨在深入探讨Scikit-learn的核心概念、实用功能,并通过实战代码示例,带你领略其强大之处。
76 12
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
【7月更文挑战第25天】在数据驱动的世界中, Scikit-learn作为顶级Python机器学习库,助力挖掘数据价值。本文以垃圾邮件识别为例,展示了其高效模型选择流程:从文本预处理至模型优化。使用TfidfVectorizer转换邮件文本,并通过Pipeline集成MultinomialNB分类器。通过GridSearchCV进行参数调优与交叉验证,评估不同模型(如随机森林)的表现,最终选定最佳模型。Scikit-learn简化了这一复杂过程,使其成为现代数据科学的必备工具。
30 2
|
2月前
|
机器学习/深度学习 存储 数据可视化
特征选择的艺术:利用Scikit-learn提升模型性能
【7月更文第22天】在机器学习的实践中,特征选择是一项至关重要的步骤,它直接影响到模型的性能、训练速度以及对新数据的泛化能力。特征选择,或称为变量选择,旨在从原始特征集中识别并保留最相关、最有影响力的特征子集,同时剔除冗余或无关紧要的特征。本文将探讨特征选择的重要性,并通过使用Python中的Scikit-learn库演示几种有效的特征选择方法,以提升模型性能。
90 4