004-基于Sklearn的机器学习入门:回归分析(下)

本节及后续章节将介绍机器学习中的几种经典回归算法,包括线性回归,多项式回归,以及正则项的岭回归等,所选方法都在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 数学模型

最简单的针对一元的多项式回归数学模型如下:

\hat{\mathbf{y}}(\mathbf{w}, \mathbf{x}) = w_0 + w_1 x + w_2 x^2 ... + w_p x^p

比如,当p=2时,上述模型简化为:

y = w_0 + w_1 x + w_2 x^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 LinearRegression
 
lin_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()

使用一元线性回归分析,得到的拟合结果如下图所示:

一元线性回归分析结果

对于上述数据,换成对应的多项式回归分析方法。

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]
多项式拟合结果示例

除了上述方法之外,还可以通过改变原始数据集的结构来实现多项式拟合,如下面的例子所示。

from sklearn.preprocessing import PolynomialFeatures
 
ploy = PolynomialFeatures(degree = 2)  #表示要为原始数据集添加几次幂
ploy.fit(X)
X2 = ploy.transform(X) #将X转换为多项式特征
 
from sklearn.linear_model import LinearRegression

lin_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]
另外一种多项式回归的实现方式

小结一下,前一节介绍的线性回归模型,以及上面的多项式回归模型,在训练模型时,通常使用基于均方误差最小化规则求解模型,这种方法称为“最小二乘法”(Least Square Method,简称LSM)。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本点到该直线上的欧氏距离之和最小。线性回归中,基于LSM的参数估计的推导,可查阅参考文献【1】,在此不再赘述。

2.4 带正则项的回归分析

2.4.1 欠拟合和过拟合

在机器学习领域,某个模型在训练数据中表现良好而在测试数据中表现糟糕的现象,称为过拟合(overfit)。过拟合是模型在验证数据上产生的误差比在训练数据上产生的误差(训练误差)大得多的现象。过拟合的一个原因是机器学习模型过于复杂。除了过拟合之外,还有一种情况是欠拟合(underfit),通常是由训练样本过少,模型过于简单所引起的。

先看一个实例,下图所示为对同样的数据,采用不同的模型的拟合结果。

欠拟合和过拟合示例
  • 左侧的图中,拟合程度较低,模型的泛化能力不高。
  • 右侧的图,模型的拟合程度虽然非常高,但考虑到实际的数据集中无法避免的存在着噪声,在理想情况下,希望噪声对模型训练的影响为尽量小。如果模型将训练集中每一个点都精准描述出来,显然包含了许许多多噪声点,在测试集中得到的准确率也不会高。另一方面,该模型复杂度过高,也会导致其泛化能力下降。
  • 中间的图中,展现的是最适合的拟合程度,模型复杂程度适中,能够直观的预测函数的走向。且泛化能力最强。

总结一下过拟合和欠拟合。

(a)欠拟合

  • 产生原因:训练样本数量少、模型复杂度过低、参数还未收敛就停止循环
  • 表现:泛化能力差,训练样本集准确率低,测试样本集准确率低。
  • 解决办法:增加样本数量;增加模型参数,提高模型复杂度;增加循环次数;查看是否是学习率过高导致模型无法收敛

(b)过拟合

  • 产生原因:数据噪声太大;特征太多;模型太复杂
  • 表现:泛化能力差,训练样本集准确率高,测试样本集准确率低。
  • 解决办法:清洗数据;减少模型参数,降低模型复杂度;增加惩罚因子(正则化),保留所有的特征,但是减少参数数值的大小。

2.4.2 正则化

正则化(Regularization)是一种用于防止过拟合的技术,一方面可以降低模型的复杂度,另一方面有助于提高模型的泛华能力。具体而言就是在拟合模型中引入少量偏差(bias)形成新拟合模型,并以此为代价减少拟合模型的方差(variance),使新拟合模型在测试数据中的表现更好。

通俗点说,规则化就是说给损失函数加上一些限制,通过这种规则去规范训练过程中的循环迭代,不会导致模型过于复杂。

2.4.3 L1正则化:岭回归

岭回归(Ridge Regression)是一种常用的线性回归方法。在普通最小二乘线性回归中,如果自变量之间存在高度相关性,会导致估计的回归系数不稳定,甚至无法准确估计。岭回归通过引入一个正则化项来解决这个问题。

(a)数学模型

岭回归的目标函数(即损失函数)可用下式表示,

|| X w - y||_2^2 + \alpha ||w||_2^2

式中,第一项是一般的线性回归损失函数,第二项称为“惩罚项”(即正则化项),本质上是学习参数w的平方和。参数\alpha是用来控制正则化强度的参数,\alpha越大,对学习参数的抑制越强;越小,对训 练数据过拟合的可能性越大。当\alpha=0时,岭回归等效于普通最小二乘回归;而当\alpha\rightarrow +\infty,回归系数趋近于0。因此,岭回归通过控制\alpha的取值,平衡了回归系数的拟合能力和稳定性。

(b)关键思想

岭回归的关键思想在最小二乘目标函数中添加一个L_2正则化项,该项对回归系数进行惩罚。这个正则化项是通过对回归系数的平方和\mathbf{w}\mathbf{w}^T进行惩罚,乘以一个调节参数\alpha

(c)实现

在Sklearn中,岭回归作为linear_model类中的一个成员函数Ridge出现的,它声明如下:

class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, copy_X=True, max_iter=None, tol=0.0001, solver='auto', positive=False, random_state=None)

部分参数说明

  • alpha:L2正则项的系数,取值为非负实数,默认值是1.0。该值取值越大,惩罚项的作用越明显。
  • fit_intercept:含义与线性规划函数相同。
  • copy_X:含义与线性规划函数相同
  • max_iter最大的迭代次数,int类型,默认为None,最大的迭代次数,对于sparse_cg和lsqr而言,默认次数取决于scipy.sparse.linalg,对于sag而言,则默认为1000次。。
  • tol优化容忍度,或称精度,用于控制学习时的误差,不同的求解方法对应的默认值不同。默认值是0.001。
  • solver:求解方法,具体方法有:‘auto’(默认值), ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’, ‘lbfgs’。各种方法的含义请查阅官方文档。这些方法中,除了‘svd’方法外,其他方法都支持致密和稀疏数据,其中当fit_intercept设置为True时,只有 ‘lsqr’, ‘sag’, ‘sparse_cg’和 ‘lbfgs’支持稀疏输入.
  1. auto根据数据类型自动选择求解器。
  2. svd使用X的奇异值分解来计算Ridge系数。对于奇异矩阵比cholesky更稳定。
  3. cholesky使用标准的scipy.linalg.solve函数来获得闭合形式的解。
  4. sparse_cg使用在scipy.sparse.linalg.cg中找到的共轭梯度求解器。作为迭代算法,这个求解器比大规模数据(设置tol和max_iter的可能性)的cholesky更合适。
  5. lsqr使用专用的正则化最小二乘常数scipy.sparse.linalg.lsqr。它是最快的,但可能在旧的scipy版本不可用。它是使用迭代过程。
  6. sag使用随机平均梯度下降。它也使用迭代过程,并且当n_samples和n_feature都很大时,通常比其他求解器更快。注意,sag快速收敛仅在具有近似相同尺度的特征上被保证。
  • positive:只有‘lbfgs’方法有效,默认值是False,当设置为True时,强制系数为正数。
  • random_state:随机状态常数,默认值为None,只对‘sag’方法和‘saga’方法有效。

属性值

  • coef_:拟合得到的系数值。如果是单目标问题,返回一个以为数组;如果是多目标问题,返回一个二维数组。
  • intercept_:截距,线性模型中的独立项,如果fit_intercept设为False,则intercept_值为0。
  • rank_:n_iter_None or ndarray of shape (n_targets,) Actual number of iterations for each target. Available only for sag and lsqr solvers. Other solvers will return None.
  • n_features:_in_int Number of features seen during fit.
  • feature_names:特征值的名称.
  • solver_str:The solver that was used at fit time by the computational routines.

(d)性能分析

优点:

  • 解决共线性问题:岭回归能够有效降低多重共线性对回归系数估计的影响。在存在高度相关的自变量的情况下,岭回归可以提供更稳定和可靠的回归系数估计。
  • 可控制的正则化参数:通过调节正则化参数\alpha的取值,可以控制模型的拟合程度和回归系数的收缩程度。这使得岭回归具有灵活性,可以根据具体问题和数据来平衡模型的复杂性和拟合能力。
  • 适用于高维数据:当数据集中存在大量自变量或特征时,岭回归可以提供更稳定的回归系数估计。它通过控制回归系数的大小来减少对噪声和不相关特征的过度拟合,从而提高模型的泛化能力。

缺点:

  • 引入偏差:岭回归通过对回归系数进行惩罚,可能引入一定的偏差。正则化项的存在会导致回归系数的估计偏离普通最小二乘估计,可能造成一定的信息损失。
  • 需要设置正则化参数:岭回归的性能受到正则化参数\alpha的影响。选择合适的\alpha值需要一定的经验或调参过程。过大或过小的\alpha值可能导致模型性能下降或过拟合的问题。
  • 不具备特征选择能力:与Lasso回归相比,岭回归不具备显式的特征选择能力。它对所有的自变量都进行了收缩,而不会将某些系数缩减到零。因此,在需要进行特征选择的情况下,Lasso回归可能更适合。

2.4.4 L1正则化:Laoss回归

LASSOLeast Absolute Shrinkage and Selection Operator)回归是一种用于线性回归和特征选择的正则化方法。它和前面介绍的岭回归,构成了最基础也是最常用的两种正则化方法。

(a)数学模型

Lasso回归的损失函数定义如下:

||X w - y||_2 ^ 2 + \alpha ||w||_1

对比岭回归,区别在于第二项“惩罚项”是学习参数w的绝对值和。参数\alpha的作用相同。

(b)关键思想

它的基本原理:在损失函数中引入L1正则化项,通过最小化数据拟合误差和正则化项的和来实现模型参数的稀疏化和特征选择

这种正则化项以模型参数的绝对值之和\left | \mathbf{w} \right |乘以一个调节参数\alpha的形式出现,促使模型选择少量重要的特征,并将其他特征的系数缩减为零。

(c)实现

在Sklearn中,岭回归作为linear_model类中的一个成员函数Lasso出现的,它声明如下:

class sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')

部分参数说明

  • alpha:参考岭回归函数内容。
  • fit_intercept:含义与线性规划函数相同。
  • precompute:确定是否使用Gram矩阵用于加速计算,如果precompute='auto',让程序自动决定。Gram矩阵可以作为参数被传递。对于稀疏数据,通常令precompute=True,保留稀疏性。
  • copy_X:是否对X进行复制,默认为True。如果设为False,在运行过程中新数据会覆盖原数据。
  • max_iter:最大迭代次数,不用的求解方法对应的值不一样
  • tol优化容忍度,用于控制学习时的误差。
  • warm_start如果warm_start=True,使用上次的解作为初始化;如果warm_start=False,清除之前的解。
  • positive:只有‘lbfgs’方法有效,默认值是False,当设置为True时,强制系数为正数。
  • random_state伪随机数发生器种子,随机选择特征来更新模型。如果为int,random_state即为随机数发生器使用的种子;如果为RandomState实例,random_state即为随机数发生器;如果为None,随机数发生器为np.random使用的随机数发生器实例。该参数仅当selection=‘random’时使用。
  • selection 如果为‘random’,每次迭代都会更新随机系数,而不是按顺序遍历每个特征。该参数值可以使得算法更快收敛,尤其当tol>1e-4时

属性值

  • coef_:拟合得到的系数值,对英语目标函数中的w。
  • sparse_coef:求解的coef_的稀疏表示。
  • intercept_:截距,线性模型中的独立项,如果fit_intercept设为False,则intercept_值为0。
  • n_iter_:坐标下降法求解达到容忍度时的迭代次数

(d)性能分析

LASSO的优势在于它能够自动进行特征选择,并产生更简洁和解释性强的模型。

优点:

  • 特征选择:LASSO回归通过L1正则化项,倾向于将某些回归系数估计为零,从而实现特征选择的效果。它可以帮助自动识别对目标变量具有显著影响的特征,从而简化模型并提高可解释性。
  • 处理共线性:LASSO回归在存在共线性(自变量之间高度相关)的情况下,可以有效减小回归系数的大小,并将某些相关变量的系数估计为零。这有助于解决多重共线性问题,提高模型的稳定性和泛化能力。
  • 可解释性:由于LASSO回归具有稀疏性,它仅选择了与目标变量相关的特征,使得模型的结果更易解释和理解。

缺点:

  • 参数选择:LASSO回归的性能高度依赖正则化参数\alpha的选择。选择合适的\alpha值并不容易,需要进行交叉验证或其他优化方法来确定最佳的正则化参数,这增加了使用LASSO回归的复杂性。
  • 不稳定性:在自变量之间存在高度相关性的情况下,LASSO回归可能对于数据中微小的变化非常敏感,导致系数估计的不稳定性。这意味着对于不同的训练集,可能会得到不同的结果。
  • 随机性:当多个特征高度相关时,LASSO回归倾向于随机选择其中之一,并将其他特征的系数估计为零。这意味着在拟合过程中,具有相似性的特征可能会被选择或排除,具有一定的随机性。

2.4.5 比较

岭回归和 Lasso 回归计算学习参数时的情况对比可用下图解释。

岭回归和Lasso回归的图例解释

图中,绿线是线性回归的误差函数,蓝线是惩罚项的相关函数。岭回归的惩罚项是学习参数的平方和,所以其图形是图(a)所示的圆形;Lasso 回归的惩罚项是绝对值的和,所以其图形是图(b)所示的四边形。原来的函数(线性回归的误差函数)与这些函数的交点就是带有正则化项的误差函数的最佳解。可以看出,在加入惩罚项后,图(a)的岭回归的学习参数得到了抑制。图 (b)的 Lasso 回归的情况与岭回归相似,学习参数同样被抑制,但学习参数 w2 变为了 0。

Lasso 回归计算的是函数与这种四边形函数的交点,因此具有学习参数容易变为 0 的特点。利用这个特点,我们可以使用学习参数不为 0 的特征来构建模型,从而达到利用 Lasso 回归选择特征的效果。这样不仅能提高模型的泛化能力,还能使模型的解释变容易。

下图列出了岭回归和Lasso回归更全面的对比。

岭回归和Lasso回归的对比

2.5 综合实例

最后,实现一个实例来对本节和上一节内容进行总结。官网给出的一个岭回归实例

参考文献:

【1】周志华,《机器学习》,清华大学出版社,2016.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值