广义线性模型(3)线性回归模型—Lasso回归、Ridge回归

2020-05-31  本文已影响0人  蛋仔鱼丸

1 Ridge回归和Lasso回归概述

在机器学习中,如果特征很多,但是训练数据X量不够大的情况下,学习器很容易把X特有的一些特点也当做是整个样本空间的一般性质进行学习,这就会出现过拟合的现象,线性回归模型也不例外。对于过拟合,在模型层面上我们一般会在模型中加入正则化项来优化模型,正则化项一般分为两种:L1正则和L2正则。

  1. 线性回归的L1正则称为Lasso(least absolute shrinkage and selection operator)回归,Lasso回归和普通线性回归模型的区别是在损失函数上增加了一个L1正则项,\lambda为调节经验风险和结构风险之间关系的系数,其损失函数为:

L(\theta )=\frac{1}{2}\sum_{i=1}^m(\sum_{i=1}^m\theta_ix_i-y_i)^2+\sum_{i=1}^m|\theta_i|=\frac{1}{2}(Xθ-Y)^T(Xθ-Y)+\lambda||\theta||_1

  1. 线性回归的L2正则称为Ridge回归(岭回归),其与普通线性回归模型的区别是在损失函数上增加了一个L2正则项,其损失函数为:

L(\theta )=\frac{1}{2}\sum_{i=1}^m(\sum_{i=1}^m\theta_ix_i-y_i)^2+\sum_{i=1}^m\theta_i^2=\frac{1}{2}(Xθ-Y)^T(Xθ-Y)+\frac{\lambda}{2}||\theta||^2

Ridge回归(L2正则)会倾向于让模型选择更小的参数,但不会使参数为0,所以L2正则不会减少模型的特征;而Lasso回归(L1正则)能使一些“不重要”的特征的参数为0,相当于丢弃了这个特征,简化了模型。

2 Ridge回归和Lasso回归求解

2.1 Ridge回归求解

根据上面的损失函数可知,Ridge回归就是在原线性回归损失函数的基础上加了个平方项,并不影响对损失函数进行求导,所以最小二乘法和梯度下降法都没问题,对损失函数求导得到:

\frac{\partial}{\partial\theta}L(\theta) = X^T(X\theta - Y)+\lambda\theta

使用最小二乘法求解\theta

θ = (X^TX+\theta E)^{-1}X^TY

使用梯度下降法求解\theta

\mathbf\theta= \mathbf\theta - \lambda [X^T(X\theta - \mathbf{Y})+\lambda\theta]

2.2 Lasso回归求解

Lasso回归的特殊之处在于其损失函数中包含一个绝对值项\lambda||\theta||_1,其在0处是非连续可导的,故普通的最小二乘法和梯度下降就都没法用了,所以需要我们来探索一下Lasso回归的参数求解方法。

2.2.1 次梯度方法

1)次导数

首先回想下梯度下降的原理:假设损失函数为多元函数L(\theta),对其进行一阶泰勒展开得到:

L(\theta+\Delta \theta)\approx L(\theta)+\sum_i\frac{\partial L}{\partial\theta_i}\Delta\theta_i

所以:\Delta L(\theta)\approx\sum_i\frac{\partial L}{\partial \theta_i}\Delta \theta_i= \nabla L\Delta \theta,如果\Delta \theta=-\lambda \nabla L,则有:

\Delta L(\theta)\approx \nabla L\Delta \theta=-\lambda \nabla L^2

梯度\nabla L不为0时,\Delta L(\theta)为负值,所以当\theta按负梯度-\lambda \nabla L更新时,损失函数在随着不断减小,这就是梯度下降的思想。

梯度即各个变量在一点处的一阶导数,一个一元函数在一阶展开时有:

f(x+\Delta x)= f(x)+f'(x)\Delta x+R_2(x), \ R_2(x)为二阶拉格朗日余项

f'(x)= \frac{f(x+\Delta x)-f(x)}{\Delta x}

函数可导的充要条件:函数在该点连续且左导数、右导数都存在并相等,稍微有些局限,不可导的函数怎么办呢?为了处理不可导的问题,我们需要引出次导数的概念。

次导数:凸函数f:I→R在点x_0的次导数是实数c使得:

f(x+\Delta x)-f(x)\geq c*\Delta x

我们可以证明,在点x_0处的次导数的集合是一个非空闭区间[a,b],其中ab是单侧极限:

它们一定存在,且满足a≤b。所有次导数的集合[a,b]称为函数fx_0处的次微分。由此可知,凸函数f(x)=|x|在原点的次导数是区间[−1, 1]

如上图,函数在某一点的导数可以看成函数在这一点上的切线,那么在原点,因为这一点不是光滑的,所以可以找到实线下方的无数条支撑直线(一维支撑超平面,支撑超平面:一个平面会把空间划分为两部分,能使函数图像仅在其中一部分的超平面),形成一个曲线族。我们就把这些支撑直线斜率的范围定义为这一点的次导数(subgradient)。

次导数性质:

2)次梯度

将次导数和次微分的概念推广到多元函数,就可以得到次梯度了。如果f是一个实变量凸函数,函数f在点x_0的次梯度对于所有的x都有:

f(x)\geq f(x_0)+g^T(x-x_0)

可以想象一下上面的二维的图来理解一下这个定义,其实几何含义就是把那些支撑超平面的向量想成次梯度,次梯度的性质:

为什么用次梯度可以求最小值呢?定义中说次梯度对所有x成立,那么函数最小值对应的x^*想必也是成立的,即:

f(x^*)-f(x_0)\leq 0\geq g^T(x^*-x_0)=|g^T|*|x^*-x_0|*cos\theta

所以可知次梯度-g^Tx^*-x_0之间的夹角\theta小于等于90°,因此-g^T是与x^*-x_0方向不背离的,即从x_0可能向x^*靠近,因此可以认为沿着负次梯度方向也可能是在逼近最小值(不绝对,不像梯度下降那样能保证损失减小)。

3)次梯度方法

次梯度方法 (subgradient method) 的做法与梯度下降类似:

x^{t+1}=x^{t}-\lambda_{t} g^t

其中,g^t是次梯度集合中的一个,\lambda一般是设定好的步长。因为次梯度方向不一定使函数值减小,所以并不是迭代到最后的x就是最优的,需要保留每一步的结果进行对比:

f(x^k_{best})=min(f(x^i)),i=1,2,...,k

至于算法会不会收敛,可以看下方参考资料中的证明。次梯度法的优势是比传统方法处理问题范围大,劣势是算法收敛速度慢。

2.2.2 坐标下降法(coordinate descent)

1)坐标下降法原理

坐标下降法,其含义就是让函数值沿着坐标轴下降,其基本思想是:一个可微的凸函数f(x),其中x是n维向量,可以理解为x有n个坐标轴,如果在某一点x^*,使得f(x^*)在每一个坐标轴x_i(i = 1,2,...n)上都是最小值,那么f(x^*)就是一个全局的最小值,如下图,在这一点对可微的凸函数有:

对于不可微的凸函数,这一结论并不成立,即收敛点并不一定是全局最优,如下图所示,两个坐标轴方向的迭代会在红色虚线的交叉处停止,因为在这两个方向单独来看,都已经找不到更小的点了,实际上并没有到全局最优点:

让我们回忆一下Lasso回归的损失函数形式:

L(\theta )=\frac{1}{2}\sum_{i=1}^m(\sum_{i=1}^m\theta_ix_i-y_i)^2+\sum_{i=1}^m|\theta_i|

其损失函数的形式是:y=g(x)+\sum_i^n h_i(x_i),其中g(x)是可微的凸函数,每个h_i(x_i)都是不可微的凸函数,这种形式可不可以使用坐标下降法呢?答案是可以的,如下图所示:

从几何上理解:因为加上的每个h_i(x_i)都是凸函数,也就是在每个坐标轴上都是

理论上来看:要证明收敛点x为全局最优解,则要有对任意yf(y) -f(x)\geq 0,而且对于凸函数,其必然满足一阶条件:g(y)-g(x)\geq \nabla g(x)^T(y-x),故综合可得:

f(y) -f(x)= g(y)-g(x)+\sum_i^n [h_i(y_i)-h_i(x_i)]

f(y) -f(x)\geq \nabla g(x)^T(y-x)+\sum_i^n [h(y_i)-h(x_i)]=\sum_i^n [\nabla_i g(x_i)(y_i-x_i)+h_i(y_i)-h_i(x_i)]

后面这个式子将任意的点y与收敛点x比较大小的问题转移到了各个坐标轴上,因为收敛点是各个坐标轴的最小值,所以\nabla_i g(x_i)(y_i-x_i)+h_i(y_i)-h_i(x_i)\geq 0,所以收敛点是全局最优。

2)坐标下降法用法

每一轮迭代中,分别把损失函数看做xn个维度x_i的函数,对每个函数求极小值,当所有的坐标轴上的x_i(i = 1,2,...n)都达到收敛时,损失函数最小,此时的x即为我们要求的结果。

具体的算法过程:

  1. 随机取一个初值x^{(0)} ,(0)代表我们迭代的轮数;

  2. 对于第k轮的迭代:我们从x^{(k)}_1开始,到x^{(k)}_n为止,依次求x^{(k)}_ix^{(k)}_i的表达式如下:

  1. 如果达到了设定的终止条件,则终止迭代,得到收敛点x,比如设定一个阈值,如果在所有维度上变化都小与这个值,那么终止迭代。

小结:

3 总结

本篇主要介绍了Ridge回归和Lasso回归的概念,当我们需要正则降低模型结构风险的时候,他们是非常合适的。此外,本文介绍了他们的求解方法,其中Lasso回归的求解较为复杂,除了本文提到的次梯度方法和坐标下降法之外,还有别的方法可用,比如最小角回归法、近端梯度下降法等,以后有时间了再加上吧,下一篇打算说说逻辑回归了。



主要参考
【机器学习】次梯度(subgradient)方法
坐标下降法(Coordinate descent)

上一篇下一篇

猜你喜欢

热点阅读