LASSO的解法

作者: Boye0212 | 来源:发表于2021-06-17 15:55 被阅读0次

LASSO非常实用,但由于它的惩罚项不可以常规地进行求导,使得很多人以为它无法显式地求出解析解。但其实并不是这样的。

1 单变量情形:软阈值法

1.1 软阈值的分类讨论

N个样本的真实值记为N维向量y,将N个样本的自变量记为z,假设我们已经将自变量做过标准化,即z' \ell_n=0z'z/N=1,这也意味着在LASSO模型中截距项为0。系数\beta是要优化的参数,惩罚项参数为\lambda\gt 0

LASSO就是要求解
\argmin_\beta \dfrac{1}{2N}(y-z\beta)'(y-z\beta)+\lambda |\beta| \tag{1}

忽略常数项后,上式等价于
\argmin_\beta \dfrac{1}{2}\beta^2 -\dfrac{y'z}{N}\beta+ \lambda |\beta|

将损失函数写成分段函数形式:
f(\beta)=\begin{cases} f_1(\beta) = \dfrac{1}{2}\beta^2 -\left(\dfrac{y'z}{N} + \lambda\right)\beta , \beta \lt 0\\ f_2(\beta) = \dfrac{1}{2}\beta^2 -\left(\dfrac{y'z}{N}- \lambda\right)\beta, \beta \geq 0 \end{cases}

分类讨论:

  • \dfrac{y'z}{N}\gt \lambda,则f_1(\beta) \gt 0f_2(\beta)\hat\beta=\dfrac{y'z}{N}- \lambda处取到最小值f_2(\hat\beta)\lt 0,因此解为\hat\beta=\dfrac{y'z}{N}- \lambda
  • \left|\dfrac{y'z}{N}\right|\leq \lambda,则f_1(\beta) \geq 0f_2(\beta) \geq 0,且在\hat\beta=0处有f_1(\hat\beta)=f_2(\hat\beta)=0,因此解为\hat\beta=0
  • \dfrac{y'z}{N}\lt -\lambda,则f_2(\beta) \gt 0f_1(\beta)\hat\beta=\dfrac{y'z}{N}+\lambda处取到最小值f_1(\hat\beta)\lt 0,因此解为\hat\beta=\dfrac{y'z}{N}+\lambda

利用软阈值算子(soft-thresholding operator)S_\lambda(x)=\text{sign}(x)(|x|-\lambda)_+,可将以上三种解统一为
\hat\beta=S_\lambda(y'z/N)

其实在我们的设定下,OLS估计量为\tilde\beta=y'z/N,因此,将OLS估计量通过一个软阈值算子的操作,就变成了LASSO估计量。

1.2 次梯度

如果引入次梯度(subgradient)的概念,可以更直接地求解(1)式。设|\beta|的次梯度为s\in \text{sign}(\beta),它的形式是,当\beta \neq 0时有s= \text{sign}(\beta),当\beta = 0时有s\in [-1,1]。根据凸优化(convex optimization)理论,求解(1)相当于求解
-\dfrac{1}{N}z'(y-z\beta) +\lambda s =0
的解(\hat\beta,\hat\lambda)。化简后得到y'z/N = \beta+\lambda s\in\beta+\lambda \text{sign}(\beta),最终同样可以解出\hat\beta=S_\lambda(y'z/N)。比如\beta=0时,就意味着y'z/N \in[-\lambda,\lambda]

2 多变量情形:循环坐标下降法

我们来看多变量的完整版LASSO问题。将自变量排成N\times p的矩阵X,我们要求解的是
\argmin_{\beta\in \mathbb{R}^p} \dfrac{1}{2N}\left\Vert y-X\beta\Vert_2^2+\lambda \right\Vert\beta\Vert_1

在这里,我们使用循环坐标下降法(cyclic coordinate descent),它的思想是,按一定顺序依次对p个参数进行优化,比如按j=1,\ldots,p的顺序,在第j次优化时,保持其他所有系数不变,变动\beta_j使损失函数最小化。

根据以上思想,我们将第j次的最优化目标写为
\argmin_{\beta_j\in \mathbb{R}^p} \dfrac{1}{2N}\left\Vert y-\sum_{k\neq j}x_{\cdot k}\beta_k-x_{\cdot j}\beta_j\right\Vert^2_2+\lambda \sum_{k\neq j}|\beta_k| +\lambda |\beta_j|
r^{(j)}=y-\sum_{k\neq j}x_{\cdot k}\hat{\beta}_k,这称为partial residual,那么根据第1.1节中的结果,我们可以得出
\hat\beta_j = S_\lambda (x_{\cdot j}' r^{(j)}/N)

r = r^{(j)}-x_{\cdot j}\hat\beta_j,上式相当于更新规则
\hat\beta_j \leftarrow S_\lambda (\hat\beta_j +x_{\cdot j}' r/N)

由于目标函数是凸的,没有局部的极小值,因此,每次更新一个坐标,最终可以收敛到全局最优解。

Pathwise coordinate descent(逐路径坐标下降):可以先取一个使\hat\beta=0的最小的\lambda,然后,略微减小\lambda的值,并以上一次得到的\hat\beta作为“warm start”,用坐标下降法迭代直到收敛,不断重复这个过程,最终就可以得到在\lambda的一系列变化范围内的解。

那么,怎样才能使\hat\beta=0?利用次梯度,我们可以知道,对于\hat\beta_j=0,必有x_{\cdot j}'y /N \in [-\lambda,\lambda],即要求\lambda \geq |x_{\cdot j}'y| /N,若要使整个\hat\beta=0,则可取\lambda =\max_j |x_{\cdot j}'y| /N,这就是使\hat\beta=0的最小的\lambda

3 其他解法

求解LASSO还有其他的解法,如homotopy method,它可以从0开始,得到序列型的解的路径,路径是分段线性的。

还有LARS(least angle regression)算法,这是homotopy method之一,可以有效得到分段线性路径。

这里不作展开。

4 正交基

在上面的过程中,如果将自变量正交化,可以大大简化计算。如在第2节中,如果自变量之间是正交的,则x_{\cdot j}' r^{(j)}/N = x_{\cdot j}' y/N,此时\hat\beta_j就是将yx_{\cdot j}做回归的OLS解,通过软阈值算子后的值。

相关文章

  • LASSO的解法

    LASSO非常实用,但由于它的惩罚项不可以常规地进行求导,使得很多人以为它无法显式地求出解析解。但其实并不是这样的...

  • 巴柔训练总结[6]

    Lasso Lasso Lasso again!!!现在我是明白了,巴柔这东西就是多上课,多去训练. 我们馆已经教...

  • 降维方法

    LASSO ref:http://statweb.stanford.edu/~tibs/lasso.htmlhtt...

  • ML06-LASSO回归

    本主题主要说明LASSO回归,LASSO回归与Ridge回归一样,都是属于广义线性回归的一种。LASSO回归与Ri...

  • R实战 | Lasso回归模型建立及变量筛选

    R实战 | Lasso回归模型建立及变量筛选 Tibshirani(1996) 引入了 LASSO (Least ...

  • R包:clustlasso基于聚类分析的特征选择分类包

    介绍 clustlasso是结合lasso和cluster-lasso策略的R包,并发表在Interpreting...

  • LASSO

    lasso是很基本的sparse的model,虽然曾经看过很多的sparse文章,但仔细想想自己竟然一直没有去注意...

  • Lasso

    Lasso 在岭回归中,是对w的2范数做约束,就是把约束条件...

  • ElasticNet回归的python实现及与岭回归、lasso

    ElasticNet回归与岭回归、Lasso回归ElasticNet回归也叫弹性网络回归,是岭回归和Lasso回归...

  • regression

    lm()即linear model线性模型函数,用来建立OLS回归模型 OLS线性回归 LASSO回归 LASSO...

网友评论

    本文标题:LASSO的解法

    本文链接:https://www.haomeiwen.com/subject/dzucyltx.html