一、线性模型----Lasso、Ridge回归及正则化的初步理解

一些基本概念

正则性:

正则性一般用来刻画函数的光滑程度,正则性越高,函数的光滑性越好。通常用Lipschitz指数k来表征函数的正则性。Lipschitz指数刻画了函数f与局部多项式的逼近程度,而函数与局部多项式的逼近程度又与函数的可微性相联系。

向量范数:

距离的定义是一个宽泛的概念,只要满足非负、自反、三角不等式就可以称之为距离。范数是一种强化的距离概念,它在定义上比距离多了一条数乘的运算法则。有时为了便于理解,我们可以把范数当作距离来理解。

L-P范数:与闵可夫斯基距离的定义一样,L-P范数不是一个范数,而是一组范数,其定义如下

                 L_{p} = \sqrt[p]{\sum_{1}^{n}x_{i}^{p}},x=\left ( x_{1} ,x_{2} ,...,x_{n} \right )

L0范数:L0范数并不是一个真正的范数,它主要被用来度量向量中非零元素的个数。

               \left \| x \right \|_{0} =\# \left (i\mid x\neq 0 \right )  #代表计数。显然L0范数不连续,难以优化求解。

L1范数:向量中各元素绝对值的和。

                \left \| x \right \|_{1}= \sum_{1}^{n}\left | x_{i} \right |

L2范数:类似于欧式距离,向量中各元素的平方和再开方。

                \left \| x \right \|_{2}=\sqrt{\sum_{1}^{n}x_{i}^{2}}

过拟合与欠拟合:

欠拟合:对样本的一般性质尚未学好,如绿色的就是树叶。

过拟合:把样本自身独有的特性当做了所有潜在样本都会有的共性,必须周围有锯齿才是树叶。

 

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第1张图片

为什么要正则化

正则化是特征选择的一种,目的是为了避免过拟合,而过拟合是非常麻烦的问题。一方面我们希望训练的模型足够强大,使得训练样本上的经验误差小,也就是通常所用到的均方误差小。另一方面,我们又希望模型具有良好的泛化能力,即给定新样本时预测值能够接近其真实值。而过拟合带来的问题就是,在训练样本上的性能极佳,而到了真实的预测阶段效果反而不尽人意。因为训练集样本中的某些特征对于最后的预测并没有起到关键作用,相反可能因为这些特征上的异常取值影响模型性能。而正则化的目的就是使得这些特征的影响变小(L1正则),甚至直接剔除这些属性的影响(L2正则)。

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第2张图片

过多的特征,同时只有非常少的训练数据,n_features>>n_samples,会容易导致出现过度拟合的问题。比如上面的右图。这样模型会千方百计的去拟合训练数据,但是,这实际上是一条很扭曲的曲线,它不停上下波动。同时如果我们没有足够的数据集(训练集)去约束这个变量过多的模型,那么就会发生过拟合。这样会导致它无法泛化到新的数据样本中,以至于无法预测新样本值。

正则化就是通过添加惩罚函数,从而使得上图中x^{3},x^{4}这两项的参数\theta ^{3},\theta ^{4}变小,而减小其影响。实际上,这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,因此 就不易发生过拟合的问题。

L1正则化----Lasso

                     \mathop{min}\limits_{w}\sum_{i=1}^{m}\left ( y_{i}-\boldsymbol{w^{T}} x_{i}\right )^{2}+\lambda \left | |\boldsymbol{w} \right ||_{1}

L2正则化----Ridge

                             \mathop{min}\limits_{w}\sum_{i=1}^{m}\left ( y_{i}-\boldsymbol{w^{T}} x_{i}\right )^{2}+\lambda \left | |\boldsymbol{w} \right ||_{2}^{2}

L1+L2----ElasticNet

                              \mathop{min}\limits_{w}\sum_{i=1}^{m}\left ( y_{i}-\boldsymbol{w^{T}} x_{i}\right )^{2}+\lambda \left ( \rho \left \| w \right \|_{1}+ \left ( 1-\rho \right )\left \| w \right \|_{2}^{2}\right )

其中式子的前半部分我们称为经验风险(衡量真实值与预测值之间的误差),后半部分称为结构风险(欲使模型尽可能简单)。 而系数\lambda称为正则化参数,也是一个超参数。 λ 要做的就是控制在两个不同的目标中的平衡关系。\lambda越大,惩罚程度越高,所有的w都将趋近于0,这样最后的拟合曲线就会接近一条直线y=b,变成了欠拟合。ElasticNet的结构风险同时考虑了L1与L2正则,参数\rho起到了平衡这两项的作用。实际使用中一般使用交叉验证来确定这两个超参数。 

 

L1与L2的比较

为什么不直接用L0呢?一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家使用的都是L1或L2正则。

1)L1正则更容易产生“稀疏解”。

     其中的非零分量所对应的特征就是我们认为重要并保留下来的特征,这就有了自动选择特征的能力。假设x仅有两个属性,w只有两个参数w_{1},w_{2},绘制不带正则项的目标函数-平方误差项等值线,再绘制L_{1}L_{2}范数等值线,如图正则化后优化目标的解要在平方误差项和正则化项之间折中,即出现在图中等值线相交处采用。L_{1}范数时,交点常出现在坐标轴上,即w_{1}w_{2}为0;而采用L_{2}范数时,交点常出现在某个象限中,即w_{1}w_{2}均非0。也就是说,L_{1}范数比L_{2}范数更易获得“稀疏”解。

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第3张图片

 

2)L2正则更快速的减小w。好像是因为一方面,L1是绝对值函数,而L2是二次函数;另一方面因为求解方法的原因。具体的内容我也不是很清楚,有待于后期对于数量较大的数据实际操作才能的出结论。

     

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第4张图片

3)L2正则有助于处理 条件数(condition number)不好的情况下矩阵求逆很困难的问题。

首先我们先理解一下什么是条件数。优化有两大难题,一是:局部最小值,二是:ill-condition病态问题。假设我们有个方程组AX=b,我们需要求解X。如果A或者b稍微的改变,会使得X的解发生很大的改变,那么这个方程组系统就是ill-condition的,反之就是well-condition的。我们具体举个例子吧:

上图我们可以看到,左边第三行我们稍微改变下系数矩阵A,可以看到结果的变化也很大。换句话来说,这个系统的解对系数矩阵A或者b太敏感了。A是我们的样本特征取值,b是样本真实值。A和b都是我们实验或者真实生活中记录的数据,在ill-condition状态下即使是发生一点小的偏差,对于参数的求解就会产生很大的误差,更不用说某些噪声的影响了。condition number就是拿来衡量ill-condition系统的可信度的。condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。

如果方阵A是非奇异的,那么A的conditionnumber定义为:

如果一个矩阵的condition number在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是ill-conditioned的,如果一个系统是ill-conditioned的,它的输出结果就不要太相信了。那L2正则如何有助于有助于处理 条件数(condition number)不好的情况呢?因为目标函数如果是二次的,对于线性回归来说,那实际上是有解析解的,求导并令导数等于零即可得到最优解为:(这里需要复习上一章线性模型多元线性回归的求解)

然而,如果当我们的样本X的数目比每个样本的维度还要小的时候,矩阵XTX将会不是满秩的,也就是{X^{T}X}会变得不可逆,所以w*就没办法直接计算出来了。或者更确切地说,将会有无穷多个解(因为我们方程组的个数小于未知数的个数)。也就是说,我们的数据不足以确定一个解,如果我们从所有可行解里随机选一个的话,很可能并不是真正好的解,总而言之,我们过拟合了。

       但如果加上L2规则项,就变成了下面这种情况,就可以直接求逆了:

具体的内容会在后面的求解过程中也会提及。

 

求解

Lasso:

由于L1范数用的是绝对值,导致LASSO的优化目标不是连续可导的,也就是说,最小二乘法,梯度下降法,牛顿法,拟牛顿法都不能用。L1正则化问题求解可采用近端梯度下降法(Proximal Gradient Descent,PGD)。

1)优化目标:

                            

\ mathop {\ min} \ limits_x \ left [{f \ left(x \ right)+ \ lambda {​{\ left \ |  x \ right \ |} _1}} \ right

\triangledown表示微分算子,若f(x)可导,梯度\triangledown f满足L-Lipschitz条件(利普希茨连续条件),即存在常数L>0,使得:

           

\压裂{​{\左\ |  {\ nabla f \ left({x'} \ right) -  \ nabla f \ left(x \ right)} \ right \ | _2 ^ 2}} {​{\ left \ |  {x' -  x} \ right \ | _2 ^ 2}} \ le L,\ forall \ left({x,x'} \ right)

L-Lipschitz(利普希茨连续条件)定义:

对于函数f(x),若其任意定义域中的x_{1}x_{2}都存在L>0,使得\left | f\left ( x_{1} \right )-f\left ( x_{2} \right ) \right |\leqslant L\left | x_{1}-x_{2} \right |,即对于f(x)上每对点,连接它们的线的斜率的绝对值总是不大于这个实数L

2)泰勒展开:

梯度\triangledown f满足L-Lipschitz条件,则在x_{k}附近f(x)通过二阶泰勒展开式近似为:

                                                         \widehat{f}\left ( x \right )\simeq f\left ( x_{k} \right )+\left \langle \triangledown f\left ( x_{k} \right ),x-x_{k} \right \rangle +\frac{L}{2}\left \| x-x_{k} \right \|^{2}

                                                                   =\frac{L}{2}\left \| x-\left ( x_{k}-\frac{1}{L}\triangledown f\left ( x_{k} \right ) \right ) \right \|_{2}^{2}+const

const是与x无关的常数,\left \langle .,.\right \rangle表示内积。则容易看出上式的最小值取在:

                                                                         x_{k+1}=x_{k}-\frac{1}{L}\triangledown f\left ( x_{k} \right )

3)简化优化问题:

这里若通过梯度下降法对f(x)f(x)连续可导)进行最小化,则每一步下降迭代实际上等价于最小化二次函数\widehat{f}\left ( x \right ),推广到优化目标,可类似地得到每一步迭代公式:

{x_ {k + 1}} = \ mathop {\ arg \ min} \ limits_x \ left [{\ frac {L} {2} \ left \ |  {x  -  \ left({​{x_k}  -  \ frac {1} {L} \ nabla f \ left({​{x_k}} \ right)} \ right)} \ right \ | _2 ^ 2 + \ lambda {​{ \左\ |  x \ right \ |} _1}} \ right]

即在每一步对f(x)进行梯度下降迭代的同时考虑L1范数最小化。可先令z= x_{k}-\frac{1}{L}\triangledown f\left ( x_{k} \right ),然后求解:

{x_ {k + 1}} = \ mathop {\ arg \ min} \ limits_x \ left [{\ frac {L} {2} \ left \ |  {x  -  z} \ right \ | _2 ^ 2 + \ lambda {​{\ left \ |  x \ right \ |} _1}} \ right]

令xi为x的第i个分量,将上式展开可以看到没有x_{i}x_{j}(x≠j)的项,即x的各分量互不影响,所以优化目标有闭式解.这里对于上述优化问题求解需要用到Soft Thresholding软阈值函数,其解为:

对于本例,带入求解即得:

x_{k+1}^{i}z^{i}分别是\boldsymbol{x_{k+1}}\boldsymbol{z}的第i个分量。因此,PGD能使LASSO和其他基于L1范数最小化的方法得以快速求解。

 

Ridge:

一种基于梯度下降,一种基于正规方程。

1)梯度下降:

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第5张图片

2)正规方程:

也是前面部分L2正则有助于处理 条件数(condition number)不好的情况下矩阵求逆很困难的问题的补充。加入了L2正则化后,通过求导令导数为零:

                                                                          \frac{\partial E_{\boldsymbol{\widehat{w}}} }{\partial \widehat{\boldsymbol{w}}}= 2\boldsymbol{X}^{T}\left ( \boldsymbol{X}\widehat{\boldsymbol{w}} -\boldsymbol{y}\right )+2\lambda \boldsymbol{w}

我们得出了下面的结论。

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第6张图片

所以。对于任意的实数\lambda >0X^{T}X+\lambda I正定,从而可逆。保证回归公式一定有意义。

实例:

同时使用线性回归、Ridge、Lasso和ElasticNet,在1到8阶的拟合结果如下。可以看到线性回归在阶数越高的情况下,曲线振荡的程度也越强,越容易发生过拟合。而加入了正则化则可以很好的解决过拟合问题。

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第7张图片

求解出的系数如下:

线性回归:

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第8张图片

Ridge回归:

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第9张图片

Lasso回归:

一、线性模型----Lasso、Ridge回归及正则化的初步理解_第10张图片

可以看到线性回归在7阶和8阶的时候系数急剧增加,曲线更加扭曲。Lasso求解出的参数已经及其接近于0了。

代码可在我个人GitHub上下载。https://github.com/Uncle-Yuanl/Machine-Learning

如果有任何问题以建议,欢迎留言交流。

参考博客:

正则化通俗化讲解。https://www.cnblogs.com/jianxinzhou/p/4083921.html

L1与L2特性。底下的评论也值得一看。https://blog.csdn.net/zouxy09/article/details/24971995

Lasso求解过程及Soft Thresholding软阈值函数证明。https://blog.csdn.net/BIT_666/article/details/80051737

Ridge求解过程:https://blog.csdn.net/u010725283/article/details/79212762

你可能感兴趣的:(机器学习笔记--周志华版,机器学习,正则化)