本文主要是介绍零基础机器学习(6)之岭回归与套索回归(正则化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 岭回归与套索回归的原理与参数调节
- 1.岭回归原理
- 2.岭回归参数调节
- 3.套索回归原理
- 4.套索回归参数的调节
- 5.正则化介绍
- ①选择
- ②什么是正则化?
- ③L1正则化是怎么实现的?
- 什么是惩罚参数向量?
- 什么是学习率?
- ④L2正则化是怎么实现的?
岭回归与套索回归的原理与参数调节
岭回归是避免线性回归过拟合现象的一种线性模型。
过拟合是指模型的“学习能力”太强了,以致于把训练样本自身的一些特点当成了所有样本的一般性质进行学习,导致泛化能力下降。
岭回归通过保持模型所有的特征变量而减小特征变量的系数值,来减小特征变量对预测结果的影响。这种保留全部特征属性,只是降低特征变量的系数值来避免过拟合的方法称为L2正则化。在Sklearn中,可通过如下语句导入岭回归模型。
from sklearn.linear_model import Ridge
1.岭回归原理
使用糖尿病数据集,用岭回归训练一个模型,并对其进行评估。
#导入岭回归模型、糖尿病数据集及划分样本的方法
from sklearn.linear_model import Ridge
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
#将数据集划分为训练集和测试集
x,y=load_diabetes().data,load_diabetes().target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
#训练模型
model=Ridge()
model.fit(x_train,y_train)
#评估模型,计算模型的预测准确率
r21=model.score(x_train,y_train) #计算模型在训练集上的预测准确率
r22=model.score(x_test,y_test) #计算模型在测试集上的预测准确率
#输出模型的预测准确率
print("模型在训练集上的预测准确率为:",r21)
print("模型在测试集上的预测准确率为:",r22)
本例中使用岭回归训练的模型,预测的准确率要比线性回归稍微低一些,但是在测试数据集上的准确率与训练数据集上的准确率几乎一致,说明岭回归的泛化能力更强
在岭回归中,可以通过改变alpha参数的值来控制减小特征变量系数的程度,alpha参数的默认值为1。
alpha参数的取值没有一定的规定。alpha的最佳设置取决于特定的数据集。增加alpha值会降低特征变量的系数,使之趋近于零,从而降低在训练集上的性能,但更有助于提高泛化能力。
2.岭回归参数调节
将程序中的“model=Ridge()”修改为“model=Ridge(alpha=10)”。
模型在训练集上的预测准确率为: 0.15119902171779687
模型在测试集上的预测准确率为: 0.16202035231681022
可见,提高alpha值之后,模型的性能大大降低了,但是测试集的预测准确率却超过了训练集。
将程序中的“model=Ridge()”修改为“model=Ridge(alpha=0.1)”。
模型在训练集上的预测准确率为: 0.521563232713
模型在测试集上的预测准确率为: 0.47340124798816186
可见,把alpha值设置为0.1之后,模型在训练集上的预测准确率就略低于线性回归,但在测试集上的预测准确率却有所提升。如果alpha值非常小,那么系统的限制几乎可以忽略不计,得到的结果也会非常接近线性回归。
3.套索回归原理
除岭回归之外,还有一个可以对线性回归进行正则化的模型,即套索回归。
套索回归通过减少部分特征来减小特征变量对预测结果的影响,从而避免过拟合,这种方法称为L1正则化。L1正则化会导致在使用套索回归时,有部分特征的系数为0,从而忽略掉一些特征,可以看成是模型对特征进行自动选择的一种方式。在Sklearn中,可通过如下语句导入套索回归模型。
from sklearn.linear_model import Lasso
#导入套索回归模型、糖尿病数据集、划分样本的方法及NumPy库
from sklearn.linear_model import Lasso
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
import numpy as np
#将数据集划分为训练集和测试集
x,y=load_diabetes().data,load_diabetes().target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
#训练模型
model=Lasso()
model.fit(x_train,y_train)
a=np.sum(model.coef_!=0) #模型特征属性不等于0的个数
#评估模型,计算模型的预测准确率
r21=model.score(x_train,y_train) #计算模型在训练集上的预测准确率
r22=model.score(x_test,y_test) #计算模型在测试集上的预测准确率
#输出模型的预测准确率
print("模型在训练集上的预测准确率为:",r21)
print("模型在测试集上的预测准确率为:",r22)
print("套索回归使用的特征数为:",a)
模型在训练集上的预测准确率为: 0.3624222204154226
模型在测试集上的预测准确率为: 0.36561940472905163
套索回归使用的特征数为: 3
程序运行结果如图所示可以看到,套索回归在训练集与测试集上的表现都比较糟糕,这意味着模型发生了欠拟合问题。在这10个特征中,套索回归模型只用了3个。与岭回归相似,套索回归也可通过调节其alpha参数,来控制特征变量系数被约束到0的强度。
4.套索回归参数的调节
在套索回归中,alpha参数的默认值也是1。为了降低欠拟合的程度,增加特征变量的数量,需要将alpha的值减小,并且增大最大迭代次数。
将程序中的“model=Lasso()”修改为“model=Lasso(alpha=0.1,max_iter=100000)
模型在训练集上的预测准确率为: 0.5194790915052718
模型在测试集上的预测准确率为: 0.4799480078849704
套索回归使用的特征数为: 7
可见,降低alpha参数的值会使得模型使用的特征数量变多,从而在训练集与测试集上有更好的表现。
5.正则化介绍
①选择
在实际应用中,该如何选择岭回归和套索回归呢?
在实践中,岭回归往往是这两个模型的优选。但是,如果数据集中特征数量过多,而且只有一小部分是真正重要的,那么套索回归会是更好的选择。
②什么是正则化?
假设我们有一个线性回归模型,模型的损失函数为均方误差(MSE)加上正则化项,其中正则化项可以是L1正则化(Lasso)或L2正则化(Ridge)。
L1正则化(Lasso)的例子:
- 假设我们要预测房屋价格,特征包括房屋面积、卧室数量和地理位置等。我们使用Lasso回归模型来拟合数据。
- Lasso回归的损失函数为: L ( β ) = MSE + α ∑ j = 1 p ∣ β j ∣ L(\beta) = \text{MSE} + \alpha \sum_{j=1}^{p} |\beta_j| L(β)=MSE+α∑j=1p∣βj∣,其中 β \beta β是模型参数, α \alpha α是正则化参数, p p p是特征数量。
- L1正则化的作用是倾向于使部分特征的系数为零,从而实现特征选择。在这个例子中,L1正则化可以帮助我们确定哪些特征对房屋价格的预测最为重要。
L2正则化(Ridge)的例子:
- 假设我们要预测股票价格,特征包括市场指数、公司收入和行业类型等。我们使用Ridge回归模型来拟合数据。
- Ridge回归的损失函数为: L ( β ) = MSE + α ∑ j = 1 p β j 2 L(\beta) = \text{MSE} + \alpha \sum_{j=1}^{p} \beta_j^2 L(β)=MSE+α∑j=1pβj2,其中 β \beta β是模型参数, α \alpha α是正则化参数, p p p是特征数量。
- L2正则化的作用是限制模型参数的大小,避免参数过大导致过拟合。在这个例子中,Ridge正则化可以帮助我们平衡各个特征对股票价格的影响,提高模型的泛化能力。
通过在损失函数中添加L1或L2正则化项,并调节正则化参数的大小,我们可以控制模型的复杂度,防止过拟合,并提高模型的泛化能力。在实际应用中,选择合适的正则化方法和参数是优化模型性能的关键。
③L1正则化是怎么实现的?
L1正则化(Lasso)的功能是通过在损失函数中添加参数向量的L1范数来实现。具体来说,L1正则化的作用是通过惩罚参数向量的绝对值之和,促使部分参数变为零,从而实现特征选择和降维的效果。
在线性回归模型中,L1正则化的损失函数可以表示为:
L ( β ) = MSE + α ∑ j = 1 p ∣ β j ∣ L(\beta) = \text{MSE} + \alpha \sum_{j=1}^{p} |\beta_j| L(β)=MSE+αj=1∑p∣βj∣
其中, L ( β ) L(\beta) L(β)是损失函数, MSE \text{MSE} MSE是均方误差, α \alpha α是正则化参数, β \beta β是模型参数向量, p p p是特征数量。
L1正则化的实现方式通常是通过梯度下降等优化算法,在每次更新模型参数时,额外考虑正则化项的影响。在梯度下降的过程中,对于每个参数 β j \beta_j βj,更新规则为:
β j = β j − η ( ∂ MSE ∂ β j + α sign ( β j ) ) \beta_j = \beta_j - \eta \left( \frac{\partial \text{MSE}}{\partial \beta_j} + \alpha \text{sign}(\beta_j) \right) βj=βj−η(∂βj∂MSE+αsign(βj))
其中, η \eta η是学习率, ∂ MSE ∂ β j \frac{\partial \text{MSE}}{\partial \beta_j} ∂βj∂MSE是损失函数关于参数 β j \beta_j βj的梯度, sign ( β j ) \text{sign}(\beta_j) sign(βj)是参数 β j \beta_j βj的符号函数。
理解:
首先我们先不看L1参数,对于L( β \beta β)这个函数我们当我们把取 β i \beta_i βi作为自变量时,你们这个函数的本体类似于(x1* β i \beta_i βi+b) 2 ^2 2+(x2* β i \beta_i βi+c ) 2 )^2 )2…这个函数整体是一个二次函数且系数为正,函数图像开头向上,且恒大于0
当他的偏导数等于0时,你们函数取最小值。
所以$\beta_j = \beta_j - \eta \frac{\partial \text{MSE}}{\partial \beta_j} $这个过程就是反复更新自变量使其函数值趋近最小值的过程,也就是损失函数趋近最小值的过程。
当我们考虑L1范式的时候,我们不难发现,对于更新规则 β j = β j − η ( ∂ MSE ∂ β j + α sign ( β j ) ) \beta_j = \beta_j - \eta \left( \frac{\partial \text{MSE}}{\partial \beta_j} + \alpha \text{sign}(\beta_j) \right) βj=βj−η(∂βj∂MSE+αsign(βj)),当 β j \beta_j βj小于0的时候, β j \beta_j βj会在原本的基础上加上一个 α \alpha α,是的 β j \beta_j βj趋近0,大于零同理
符号函数是一个常用的数学函数,通常用符号 sgn ( x ) \text{sgn}(x) sgn(x)表示。符号函数的定义如下:
sgn ( x ) = { − 1 , if x < 0 0 , if x = 0 1 , if x > 0 \text{sgn}(x) = \begin{cases} -1, & \text{if } x < 0 \\ 0, & \text{if } x = 0 \\ 1, & \text{if } x > 0 \end{cases} sgn(x)=⎩ ⎨ ⎧−1,0,1,if x<0if x=0if x>0
也可以用以下方式表示:
sgn ( x ) = x ∣ x ∣ \text{sgn}(x) = \frac{x}{|x|} sgn(x)=∣x∣x
如果的值 β j \beta_j βj的值大,就是特征属性的权重要大,那么其实 α \alpha α的影响相对很小(前面还有一个学习率减少影响),故只有权重小的特征会被趋近0.
总的来说,L1正则化通过在损失函数中添加参数向量的L1范数惩罚项,并在优化过程中考虑这一项的影响,实现了对模型参数的稀疏性约束,有助于特征选择和降维。
什么是惩罚参数向量?
在机器学习中,惩罚参数向量是指在正则化项中对模型参数进行惩罚的参数向量。正则化是一种常用的技术,用于控制模型的复杂度,避免过拟合。在正则化过程中,通过在损失函数中添加一个正则化项,对模型参数进行惩罚,从而促使模型更加简单,提高泛化能力。
在L1正则化(Lasso)中,惩罚参数向量是指参数向量的L1范数:
α ∑ j = 1 p ∣ β j ∣ \alpha \sum_{j=1}^{p} |\beta_j| αj=1∑p∣βj∣
其中, α \alpha α是正则化参数, β \beta β是模型参数向量, p p p是参数的数量。L1正则化通过对参数向量的绝对值之和进行惩罚,促使部分参数变为零,实现特征选择和降维的效果。惩罚参数向量的引入对于模型训练过程中的优化算法起到了重要作用,例如在梯度下降中,更新规则中考虑了对参数的惩罚项,使得模型在更新参数时更倾向于稀疏性,有助于提高模型的泛化能力。通过调节正则化参数 α \alpha α的大小,可以控制惩罚的强度,进而影响模型的复杂度和泛化性能。
总的来说,惩罚参数向量是正则化过程中用于对模型参数进行惩罚的参数向量,通过控制参数的稀疏性,实现特征选择、降维和泛化能力的提升。
什么是学习率?
学习率(Learning Rate)是深度学习中一个重要的超参数,用于控制模型在每次迭代中更新参数的幅度。在使用梯度下降等优化算法时,学习率决定了参数更新的步长大小。
具体来说,学习率定义了在参数空间中沿着梯度方向更新参数的速度。如果学习率设置过大,可能导致参数更新过大,错过最优值;而如果学习率设置过小,可能导致收敛速度过慢,需要更多的迭代次数才能收敛到最优值。
在梯度下降算法中,参数的更新规则通常如下:
θ = θ − η ∇ J ( θ ) \theta = \theta - \eta \nabla J(\theta) θ=θ−η∇J(θ)
其中, θ \theta θ表示模型参数, η \eta η表示学习率, ∇ J ( θ ) \nabla J(\theta) ∇J(θ)表示损失函数 J J J关于参数 θ \theta θ的梯度。选择合适的学习率是优化算法成功的关键之一。通常情况下,需要根据具体问题和模型的特点来调整学习率的大小。常见的学习率调整策略包括固定学习率、动态调整学习率(如学习率衰减)、自适应学习率(如Adam优化算法中的自适应学习率调整)等。
在实际应用中,通过反复实验和调整学习率,可以找到一个合适的学习率,使得模型在训练过程中能够快速、稳定地收敛到最优解。
④L2正则化是怎么实现的?
L2正则化是一种常用的正则化方法,它通过在损失函数中添加一个L2范数惩罚项来限制模型参数的大小。L2正则化的目的是防止过拟合,提高模型的泛化能力。
在线性回归等模型中,L2正则化的损失函数可以表示为:
$L(\beta) = \frac{1}{2n} \sum_{i=1}^{n} (y_i - \hat{y}i)^2 + \frac{\alpha}{2} \sum{j=1}^{p} \beta_j^2 $
其中,第一项是MSE,第二项是L2正则化项, α \alpha α是正则化参数,控制正则化项对损失函数的影响程度。
在梯度下降算法中,加入L2正则化的梯度更新规则为:
$\beta_j = \beta_j - \eta \left( \frac{\partial L}{\partial \beta_j} + \alpha \beta_j \right) $
其中, η \eta η是学习率, ∂ L ∂ β j \frac{\partial L}{\partial \beta_j} ∂βj∂L是损失函数对参数 β j \beta_j βj的梯度。在更新参数时,除了考虑损失函数的梯度,还考虑了L2正则化项对参数的影响,使得参数在更新过程中受到惩罚,避免过大的参数值。
我们可以看出梯度更新规则中的函数,当参数 β j \beta_j βj越大,那么每次更新 β j \beta_j βj的幅度越大。当 β j \beta_j βj>0是,那么 α \alpha α β j \beta_j βj>0,使得 β j \beta_j βj的绝对值变小,但是不会一只变小,知道趋近 ( ∂ L ∂ β j + α β j ) \left( \frac{\partial L}{\partial \beta_j} + \alpha \beta_j \right) (∂βj∂L+αβj)=0.
当 β j \beta_j βj<0同理,都使得 β j \beta_j βj的绝对值变小,从而降低参数大小,并且原本的参数越大,降低的幅度也大。
总结一下,L2正则化通过在损失函数中添加参数的平方和作为惩罚项,控制模型参数的大小,防止过拟合。在梯度下降算法中,通过调整参数更新规则,同时考虑损失函数的梯度和L2正则化项的影响,实现对模型参数的正则化。
这篇关于零基础机器学习(6)之岭回归与套索回归(正则化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!