本节及后续章节将介绍机器学习中的几种经典回归算法,包括线性回归,多项式回归,以及正则项的岭回归等,所选方法都在Sklearn库中聚类模块有具体实现。本节为下篇,将介绍多项式回归和岭回归等。
目录
2.3 多项式回归
2.3.1 概述
2.3.2 数学模型
2.3.3 Sklearn实现
2.4 带正则项的回归分析
2.4.1 正则项
2.4.2 岭回归
2.4.3 Laoss回归
2.5 综合实例
2.3 多项式回归
在一般的线性回归中,使用的假设函数是一元一次方程,也就是二维平面上的一条直线。但是很多时候可能会遇到直线方程无法很好的拟合数据的情况,这个时候可以尝试使用多项式回归(Polynomial Regression)。
2.3.1 概述
多项式回归是一种扩展了线性回归模型的统计方法,用于拟合数据之间的非线性关系。具体来说,多项式回归通过在传统的线性回归模型中增加变量的高次项(如平方项、立方项等),使得模型能够更好地适应数据中的曲线趋势。这种方法的核心思想是,任何光滑的曲线都可以通过适当高阶的多项式来逼近。
以下是多项式回归的一些关键点:
- 基本原理:多项式回归的基本思想是在线性回归的基础上,将自变量的幂次作为新的特征加入模型中,从而使模型能够捕捉到数据的非线性结构。
- 模型表达:见下面。
- 模型评估:在选择多项式的阶数时,需要权衡模型的复杂度和拟合度。过高的阶数可能导致过拟合,即模型在训练数据上表现良好,但在新的数据上泛化能力差。
- 优缺点:多项式回归的优点在于其能够拟合非线性关系,但缺点是随着项数的增加,模型可能会变得过于复杂,导致过拟合和计算成本的增加。
添加高阶项的时候,也增加了模型的复杂度。随着模型复杂度的升高,模型的容量以及拟合数据的能力增加,可以进一步降低训练误差,但导致过拟合的风险也随之增加。
2.3.2 数学模型
最简单的针对一元的多项式回归数学模型如下:
比如,当p=2时,上述模型简化为:
上式是典型的基于一次函数和二次函数的多项式表达式。
2.3.3 Sklearn实现
Sklearn仍然使用LinearRegression函数实现多项式拟合。不过要首先给添加新的特征,一般是 高阶项。
下面的一个例子是生成一个含有随机噪声的多项式序列,并分别使用一元线性回归和多项式回归两种方式进行拟合。
import numpy as np
import matplotlib.pyplot as plt#生产随机数据100个——范围在(-3,3)
x = np.random.uniform(-3,3,size=100)
X = x.reshape(-1,1)
y = 0.5 *x**2 + 2*x + 3 + np.random.normal(0,1,size=100)from sklearn.linear_model import LinearRegressionlin_reg = LinearRegression()
lin_reg.fit(X,y)y_predict = lin_reg.predict(X)plt.scatter(x,y) #原数据
plt.plot(x,y_predict,color='r') #预测值
plt.show()
使用一元线性回归分析,得到的拟合结果如下图所示:
![](https://i-blog.csdnimg.cn/direct/036ef102fe0744dbab2e9c910486763a.png)
对于上述数据,换成对应的多项式回归分析方法。
X2 = np.hstack([X,X**2]) # 增加二次项lin_reg2 = LinearRegression()
lin_reg2.fit(X2,y)
y_predict2 = lin_reg2.predict(X2)print("Coefficients: \n", lin_reg2.coef_)#绘制结果
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict2[np.argsort(x)],color='b',linewidth=3) #对x,y_predict2进行排序,光滑展示
plt.show()
以下是使用多项式回归模型得到的拟合结果,可以和对比线性回归模型拟合结果进行对比。
Coefficients: [2.05014314 0.49320177]
![](https://i-blog.csdnimg.cn/direct/9b4ada8b22254671a743bb44c9d9249a.png)
除了上述方法之外,还可以通过改变原始数据集的结构来实现多项式拟合,如下面的例子所示。
from sklearn.preprocessing import PolynomialFeaturesploy = PolynomialFeatures(degree = 2) #表示要为原始数据集添加几次幂
ploy.fit(X)
X2 = ploy.transform(X) #将X转换为多项式特征from sklearn.linear_model import LinearRegressionlin_reg3 = LinearRegression()
lin_reg3.fit(X2,y)
y_predict3 = lin_reg3.predict(X2)print("Coefficients: \n", lin_reg3.coef_)#绘制结果
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict3[np.argsort(x)], color='magenta', linewidth=3) #对x,y_predict2进行排序,光滑展示
plt.show()
输出结果如下:
Coefficients: [0. 2.05014314 0.49320177]
![](https://i-blog.csdnimg.cn/direct/062b11e50d5b433d95e4d54a939139ca.png)
小结一下,前一节介绍的线性回归模型,以及上面的多项式回归模型,在训练模型时,通常使用基于均方误差最小化规则求解模型,这种方法称为“最小二乘法”(Least Square Method,简称LSM)。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本点到该直线上的欧氏距离之和最小。线性回归中,基于LSM的参数估计的推导,可查阅参考文献【1】,在此不再赘述。
2.4 带正则项的回归分析
2.4.1 欠拟合和过拟合
在机器学习领域,某个模型在训练数据中表现良好而在测试数据中表现糟糕的现象,称为过拟合(overfit)。过拟合是模型在验证数据上产生的误差比在训练数据上产生的误差(训练误差)大得多的现象。过拟合的一个原因是机器学习模型过于复杂。除了过拟合之外,还有一种情况是欠拟合,但一般是由训练样本过少,模型过于简单所引起的。
先看一个实例,下图所示为对同样的数据,采用不同的模型的拟合结果。
![](https://i-blog.csdnimg.cn/direct/049fbf13e90142f2afbac436b55352d4.png)
- 左侧的图中,拟合程度较低,模型的泛化能力不高。
- 右侧的图,模型的拟合程度虽然非常高,但考虑到实际的数据集中无法避免的存在着噪声,在理想情况下,希望噪声对模型训练的影响为尽量小。如果模型将训练集中每一个点都精准描述出来,显然包含了许许多多噪声点,在测试集中得到的准确率也不会高。另一方面,该模型复杂度过高,也会导致其泛化能力下降。
- 中间的图中,展现的是最适合的拟合程度,模型复杂程度适中,能够直观的预测函数的走向。且泛化能力最强。
总结一下过拟合和欠拟合。
(a)欠拟合
- 产生原因:训练样本数量少、模型复杂度过低、参数还未收敛就停止循环
- 表现:泛化能力差,训练样本集准确率低,测试样本集准确率低。
- 解决办法:增加样本数量;增加模型参数,提高模型复杂度;增加循环次数;查看是否是学习率过高导致模型无法收敛
(b)过拟合
- 产生原因:数据噪声太大;特征太多;模型太复杂
- 表现:泛化能力差,训练样本集准确率高,测试样本集准确率低。
- 解决办法:清洗数据;减少模型参数,降低模型复杂度;增加惩罚因子(正则化),保留所有的特征,但是减少参数数值的大小。
2.4.2 正则化
正则化(Regularization)是一种用于防止过拟合的技术,一方面可以降低模型的复杂度,另一方面有助于提高模型的泛华能力。具体而言就是在拟合模型中引入少量偏差(bias)形成新拟合模型,并以此为代价减少拟合模型的方差(variance),使新拟合模型在测试数据中的表现更好。
通俗点说,规则化就是说给损失函数加上一些限制,通过这种规则去规范训练过程中的循环迭代,不会导致模型过于复杂。
2.4.3 L1正则化:岭回归
复杂模型过拟合的一个原因是学习参数 wi 的值太大.
岭回归(Ridge Regression)是一种常用的线性回归方法。在普通最小二乘线性回归中,如果自变量之间存在高度相关性,会导致估计的回归系数不稳定,甚至无法准确估计。岭回归通过引入一个正则化项来解决这个问题。
岭回归的关键思想:在最小二乘目标函数中添加一个正则化项,该项对回归系数进行惩罚。这个正则化项是通过对回归系数的平方和
进行惩罚,乘以一个调节参数
。当
时,岭回归等效于普通最小二乘回归;而当
,回归系数趋近于0。因此,岭回归通过控制
的取值,平衡了回归系数的拟合能力和稳定性。
优点:
- 解决共线性问题:岭回归能够有效降低多重共线性对回归系数估计的影响。在存在高度相关的自变量的情况下,岭回归可以提供更稳定和可靠的回归系数估计。
- 可控制的正则化参数:通过调节正则化参数
的取值,可以控制模型的拟合程度和回归系数的收缩程度。这使得岭回归具有灵活性,可以根据具体问题和数据来平衡模型的复杂性和拟合能力。
- 适用于高维数据:当数据集中存在大量自变量或特征时,岭回归可以提供更稳定的回归系数估计。它通过控制回归系数的大小来减少对噪声和不相关特征的过度拟合,从而提高模型的泛化能力。
缺点:
- 引入偏差:岭回归通过对回归系数进行惩罚,可能引入一定的偏差。正则化项的存在会导致回归系数的估计偏离普通最小二乘估计,可能造成一定的信息损失。
- 需要设置正则化参数:岭回归的性能受到正则化参数
的影响。选择合适的
值需要一定的经验或调参过程。过大或过小的
值可能导致模型性能下降或过拟合的问题。
- 不具备特征选择能力:与Lasso回归相比,岭回归不具备显式的特征选择能力。它对所有的自变量都进行了收缩,而不会将某些系数缩减到零。因此,在需要进行特征选择的情况下,Lasso回归可能更适合。
2.4.4 L1正则化:Laoss回归
LASSO(Least Absolute Shrinkage and Selection Operator)是一种用于线性回归和特征选择的正则化方法。它和前面介绍的岭回归,构成了最基础也是最常用的两种正则化方法。
它的基本原理:在损失函数中引入L1正则化项,通过最小化数据拟合误差和正则化项的和来实现模型参数的稀疏化和特征选择。
这种正则化项以模型参数的绝对值之和乘以一个调节参数
的形式出现,促使模型选择少量重要的特征,并将其他特征的系数缩减为零。
通过调节的值,可以控制模型的复杂度和特征选择的程度。LASSO的优势在于它能够自动进行特征选择,并产生更简洁和解释性强的模型。
优点:
- 特征选择:LASSO回归通过L1正则化项,倾向于将某些回归系数估计为零,从而实现特征选择的效果。它可以帮助自动识别对目标变量具有显著影响的特征,从而简化模型并提高可解释性。
- 处理共线性:LASSO回归在存在共线性(自变量之间高度相关)的情况下,可以有效减小回归系数的大小,并将某些相关变量的系数估计为零。这有助于解决多重共线性问题,提高模型的稳定性和泛化能力。
- 可解释性:由于LASSO回归具有稀疏性,它仅选择了与目标变量相关的特征,使得模型的结果更易解释和理解。
缺点:
- 参数选择:LASSO回归的性能高度依赖正则化参数λ的选择。选择合适的λ值并不容易,需要进行交叉验证或其他优化方法来确定最佳的正则化参数,这增加了使用LASSO回归的复杂性。
- 不稳定性:在自变量之间存在高度相关性的情况下,LASSO回归可能对于数据中微小的变化非常敏感,导致系数估计的不稳定性。这意味着对于不同的训练集,可能会得到不同的结果。
- 随机性:当多个特征高度相关时,LASSO回归倾向于随机选择其中之一,并将其他特征的系数估计为零。这意味着在拟合过程中,具有相似性的特征可能会被选择或排除,具有一定的随机性。
2.4.5 比较
岭回归和 Lasso 回归计算学习参数时的情况分别如图 2-11a 和图 2-11b 所示。
![](https://i-blog.csdnimg.cn/direct/f2d839125da54e0e84d0293e5bcbdc8a.png)
图中,绿线是线性回归的误差函数,蓝线是惩罚项的相关函数。岭回归的惩罚项是学习参数的平方和,所以其图形是图(a)所示的圆形;Lasso 回归的惩罚项是绝对值的和,所以其图形是图(b)所示的四边形。原来的函数(线性回归的误差函数)与这些函数的交点就是带有正则化项的误差函数的最佳解。可以看出,在加入惩罚项后,图(a)的岭回归的学习参数得到了抑制。图 (b)的 Lasso 回归的情况与岭回归相似,学习参数同样被抑制,但学习参数 w2 变为了 0。
Lasso 回归计算的是函数与这种四边形函数的交点,因此具有学习参数容易变为 0 的特点。利用这个特点,我们可以使用学习参数不为 0 的特征来构建模型,从而达到利用 Lasso 回归选择特征的效果。这样不仅能提高模型的泛化能力,还能使模型的解释变容易。
2.5 综合实例
最后,实现一个实例来对本节和上一节内容进行总结。
参考文献:
【1】周志华,《机器学习》,清华大学出版社,2016.