前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习入门 8-9 lasso

机器学习入门 8-9 lasso

作者头像
触摸壹缕阳光
发布2020-01-14 15:58:42
1.1K0
发布2020-01-14 15:58:42
举报

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节介绍模型正则化的另外一种方式LASSO,依然通过具体的编程实现LASSO,并对α取值与过拟合(拟合曲线)之间的关系进行探讨,进而对LASSO与Ridge进行比较。

1

LASSO Regression

模型正则化的方式有很多种,在上一小节介绍了岭回归模型正则化的方式,在这一小节介绍另外一种模型正则化的方式LASSO Regression。LASSO这个词可能不像Ridge(岭)好理解,其实LASSO这个词是一大串英文单词首字母的缩写。

Ridge Regression的任务是最小化损失函数(在线性回归中为MSE)的同时让θ系数值尽量的小,为了达到这个目的,我们在原有损失函数的基础上添加了一项所有θ值平方和的正则化项,希望在最小化损失函数的同时考虑到新添加的正则化项,通过正则化项可以控制θ的大小,让θ值尽可能的小。为了能够灵活决定模型正则化的程度,引入了确定正则化程度的超参数α。

  1. 当α取值为0的时候,相当于没有添加正则化项,此时优化的目标函数仅仅包含MSE损失函数;
  2. 在极端情况下α取值为正无穷的时候,此时前面的MSE损失函数占整个待优化的目标函数的比重非常小,优化的主要任务变成了让θ系数尽可能的小,这种情况下只有当所有的θi都等于0的时候才能使得θi的平方尽可能的小;

很显然对于MSE(预测的准确度)和正则化项(让每个θ系数都尽量小)之间需要取得一个平衡。

LASSO Regression的原理和Ridge Regression是一样的,只不过对于如何表达θ值最小化这件事情上选择了不同的正则化方式。我们可以用θ平方来代表θ的大小,当然也可以使用θ的绝对值来代表θ的大小,而LASSO Regression的过程就是在损失函数MSE的基础上添加α乘以所有θi的绝对值,在LASSO Regression中的超参数α和在Ridge Regression中的作用一样,依然是用于调节θ系数小的程度占整个优化目标函数程度的多少。

那LASSO到底什么意思呢???

LASSO Regression是由Least Absolute Shrinkage and Selection Operator Regression这一系列单词的首字母大写组合而成的,当然了不需要记住这一大串单词,只需要记住LASSO这种说法就可以了。

在LASSO的英文拼写中可以看到"Selection Operator"这个关键词,中文翻译为"选择运算符",也就是说LASSO Regression有一定的selection的功能,下一小节会更为详细的解释。

在数学的意义上理解,LASSO Regression和Ridge Regression似乎都是让系数θ尽可能小。接下来通过具体的编程实践看看LASSO Regression具体的效果,并对比与Ridge Regression有哪些不同的地方。

  • Part1:代码基本和上一小节一样,首先创建一个虚拟的测试用例,x和y之间呈现有一定噪声的线性关系。
  • Part2:实现不使用任何正则化方式的多项式回归,将degree参数设置为20,计算在测试集上的均方误差,并绘制对应的拟合曲线。

绘制多像是回归阶数为20的拟合曲线。

没有添加任何正则化的多项式回归在测试用例上的均方误差值为167左右,这个误差相当的大,通过绘制出来的拟合曲线也可以看出,这根拟合曲线相对来说非常不规则和陡峭,很明显模型发生了过拟合,因此在测试集上的预测结果非常不好,模型的泛化能力非常差。

  • Part3:使用LASSO Regression的方式对生成的测试用例进行预测,求出相应的均方误差值,并绘制拟合曲线。

Ridge Regression在sklearn的linear_model包下,同样的LASSO Regression类也在sklearn的linear_model包下。实现LASSO Regression的方式和实现Ridge Regression的方式类似,只是将相应的Ridge类换成LASSO类即可。

接下来通过取不同的α值,观察在不同α值下,LASSO Regression的表现。为了试验准确性,将多项式回归到阶数统一设置为20。

  • Step1:LASSO Regression超参数α设置为0.01。

在LASSO Regression中首先尝试将α的取值设置为0.01。这里需要注意,此时在LASSO Regression中首先尝试的第一个α值比在上一小节介绍的Ridge Regression中首先尝试传入的α值要大很多,这是因为对于Ridge Regression来说,正则化的那一项是θ的平方和,平方后的结果会非常的大,所以将α设置的很小来将正则化项的结果调小。而对于LASSO Regression来说,它的正则化项是每个θ绝对值的和,所以相对来说LASSO Regression这个正则化项要比Ridge Regression中的正则化项要小很多,所以当设置LASSO的α取值的时候可以大一些。对于这些超参数都是根据经验进行取值的,如果具体进行机器学习算法的过程中需要通过不断的实验不断的观察结果慢慢地形成经验指导,这样在调参的时候可以大概指导参数在那个范围内选择会相应的比较好。

此时α取值为0.01的LASSO Regression在测试集上的均方误差值为1.14,相比于之前不使用任何正则化项的多项式回归167的均方误差值要小很多。

接下来使用封装的plot_model函数绘制α取值为0.01的LASSO回归的拟合曲线。

代码语言:javascript
复制
plot_model(lasso1_reg)
  • Step2:LASSO Regression超参数α设置为0.1。

实验的过程和上一小节实验Ridge Regression一致,将α的取值逐渐增大。此时将α取值设置为0.1。在测试集上得到的均方误差值为1.12,比没有使用正则化的多项式167以及将α设置为0.01的LASSO Regression得到的均方误差值都要小。

接下来使用封装的plot_model函数绘制α取值为0.1的LASSO Regression的拟合曲线。

代码语言:javascript
复制
plot_model(lasso2_reg)

通过绘制结果可以看出,拟合的曲线已经非常接近一根直线了。

  • Step3:LASSO Regression超参数α设置为1。

此时计算出来的均方误差值为1.84,虽然比没有使用正则化的多项式回归要好,但是比α取值为0.01以及α取值为0.1的均方误差结果要差一点,很明显当α取值为1的时候正则化过渡。

接下来使用封装的plot_model函数绘制α取值为1的LASSO回归的拟合曲线。

代码语言:javascript
复制
plot_model(lasso3_reg)

通过绘制结果可以看出,拟合的曲线已经是一条平行的直线了。那么当α取值为1的时候,LASSO Regression的正则化程度已经非常高了。当然在实际选择机器学习算法参数的时候,需要在完全不正则化(α取值为0)与正则化过头(就此例而言α取值为1,拟合曲线变成一条平行的直线)之间选择一个效果最好的取值。

回忆一下在上一个小节实验Ridge Regression的时候,随着α取值逐渐增大,相应的拟合曲线虽然变的越来越平滑,但是它始终呈现的是曲线的形态,但是对于LASSO Regression来说,当α取0.1的时候,拟合曲线近乎就是一条直线了,这个特性是由LASSO Regression正则化项式子的特殊性所决定的。

2

Ridge与LASSO

接下来简单比较一下Ridge和LASSO这两种正则化的方式。

右上角是将α值设置为100的Ridge Regression,此时可以发现得到的模型依然是一条曲线,事实上使用Ridge Regression很难让我们得到的这个模型是一根倾斜的直线,它总是保持着这种弯曲的形状。而当我们使用LASSO Regression的时候,在上图右下角α取值为0.1的时候,此时可以发现得到的模型其实严格来说依然是一根曲线,但是很显然比右上角的Ridge Regression得到的拟合曲线弯曲程度更低,更接近一根直线。换句话说,使用LASSO Regression这种方式得到的模型更倾向于是一根直线,而很显然使用Ridge Regression得到的依然是曲线。LASSO Regression更倾向于得到一根直线,如果将其反映到系数θ上,有很多的特征前面不再拥有系数(系数变为0),这也正是LASSO Regression的一个特点。

LASSO Regression倾向于使得我们在优化这个损失函数的过程中,让一部分系数θ变为0,而不是让所有的θ都变成一个很小的值(Ridge回归的倾向),正是由于这个特性LASSO名字中最后的"Selection Operator"的意思就在于LASSO能够当做是一种特征选择的方法。因为使用LASSO的过程中如果某些θ等于0,就代表了LASSO Regression认为这个θ值所对应的那个特征完全没有用,而剩下的θ不等于0的那些特征就是LASSO Regression认为这个θ值对应的特征是有用的,所以LASSO可以当做特征选择来使用,这就是英文"Selection Operator"的具体含义。

为什么LASSO会有Selection Operator这样的作用呢?首先来看一下Ridge回归。

对于Ridge Regression来说对应的损失函数为J(θ),现在我们单看模型正则化项,也就是Ridge Regression单独加上的这部分(此时可以认为将α值取无穷大),对于正则化项来说,我们了解此时θ值一定是逐渐变为0,但是现在关键是看θ是如何从一个初始化的θ值变为0的。我们可以使用梯度下降的角度来看这个问题,对J(θ)的正则化项求导,计算得到的梯度非常简单,每一个式子对每一个θi求导得到的结果就是二倍的θi,其他的θ对于θi而言都是常数,然后乘上前面的α\2得到的θi的导数就是θi,依次类推得到的梯度值如上图左下角所示,此时梯度中的θ1,θ2...θn都是有值的,所以如果此时初始化的点为蓝色的点,会顺着梯度反方向逐渐达到零点,也就是对应上图的右下角轨迹所示,梯度下降过程的每一步θ都是有值的。

对于LASSO Regression来说。

同样让LASSO Regression中的α值趋向于无穷,也就是说此时同样只看LASSO Regression中的正则化项,此时的正则化项中是绝对值函数,绝对值是不可导的,不过我们可以通过一个简单的分类函数sign来刻画绝对值函数的导数,得到的梯度如上图左下角所示。对于sign函数来说,当θ值大于0的时候取1,当θ值等于0的时候取0,当θ值小于0的时候取-1,这其实非常好理解,因为x的绝对值函数在x大于0的时候为y = x,在x小于0的时候y = -x,我们相当于分情况讨论。

对于LASSO Regression来说,如果不考虑MSE这一项,它的梯度就是α乘上sign(θi),梯度向量中的值不是1、-1就是0,也就是说如果从蓝色的坐标点开始使用LASSO Regression的方式,它会沿着一个方向首先走到轴为0的地方,如上图右下角所示,此时梯度的反方向沿着(-1, -1),走到了y轴之后再在y轴上沿着y轴方向达到0点,此时的方向就是(0, -1)。

LASSO Regression不能像前面Ridge Regression一样,用曲线的方式逐渐达到0点位置,而只能使用这种非常规则的方式,在这个过程中,很有可能达到某些轴的0点,使得LASSO Regression最终结果的θ值中包含很多的0。其实这也解释为什么叫做岭回归,因为岭回归的过程更像是爬山的过程,在梯度下降法中梯度下降的过程就是不断的找坡度缓的地方,一点一点的往下行进,这就像翻山越岭的过程,所以称Ridge Regression为岭回归。LASSO Regression具有一个非常重要的特性就是作为特征选择的过程,不过也正是因为这样的特征使得LASSO Regression这种方法有可能会错误的将一些原本有用的特征也变为无用特征,所以从计算的角度来看,还是Ridge Regression更为准确,但是如果你的特征特别大的话,比如说在多项式回归中非要将degree的值设置为100,可以想象此时的特征数量会非常非常的多,如果此时使用LASSO Regression的话可以非常好的起到将模型的特征变小的作用。

在下一小节继续总结Ridge Regression和LASSO Regression,并且据此提出另一种模型弹性网。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档