LARS与Lasso和Forward Stagewise

在之前的文章中,我们说过,系数 $\boldsymbol{\beta}$ 在LARS、Lasso和前向阶进算法(Forward Stagewise)中的相似变化并不是巧合,LARS可以通过小的改动来实现Lasso和阶进算法。

LARS 与 Lasso

通过对前文中式(17)-式(22)进行改动(本文的公式序号从这一篇文章顺延),LARS就可以得到Lasso的所有解。

令 $\hat{\boldsymbol{\beta}}$ 为式(8)的解,即有 $\hat{\boldsymbol{\mu}}=X\hat{\boldsymbol{\beta}}$ 。很容易证明(参见参考资料1里Section5中的Lemma8)任意非零系数 $\hat{\beta}_j$ 和 当前的相关度 $\hat{c}_j$ 同号,即
$$\text{sign}(\hat{\beta}_j)=\text{sign}(\hat{c}_j)=s_j\tag{26}$$
LARS算法并没有式(26)的限制,不过修改一下就可以很容易地加上这个限制。
假设我们刚刚进行完LARS的一步,给定了一个新的“活跃集” $\mathcal{A}$,并且对应的LARS估计值 $\hat{\boldsymbol{\mu}}_{\mathcal{A}}$ 和Lasso的解 $\hat{\boldsymbol{\mu}}=X\hat{\boldsymbol{\beta}}$ 相同。令
$$w_{\mathcal{A}}=A_{\mathcal{A}}\mathcal{G}_{\mathcal{A}}^{-1}1_{\mathcal{A}}\tag{27}$$
定义 $\hat{\mathbf{d}}$ 为一个 $m$ 维向量( 等于 $s_jw_{\mathcal{A}j} \quad\text{for} \quad j\in\mathcal{A}\quad \text{and $0$ eleswhere}$ )。按式(23)中LARS路线的正向 $\gamma$ 方向前进,则有
$$\boldsymbol{\mu}(\gamma)=X\boldsymbol{\beta}(\gamma) \quad\text{where}\quad \beta_j(\gamma)=\hat{\gamma}_j+\gamma\hat{d}_j\tag{28}$$
因此,$\beta_j(\gamma)$ 会在下面的时候变号
$$\gamma_j=-\hat{\beta}_j/\hat{d}_j\tag{29}$$
第一次变号发生于
$$\tilde{\gamma}=\min_{\gamma_j>0}\{\gamma_j\}\tag{30}$$
如果没有 $\gamma_j>0$,$\tilde{\gamma}$ 等于无穷。
如果 $\tilde{\gamma}$ 小于 $\hat{y}$,则对于大于 $\tilde{\gamma}$ 的 $\gamma$,$\beta_j(\gamma)$ 不可能是Lasso的一个解,因为它破坏了式(26)的约束:$\beta_{\tilde{j}}(\gamma)$ 变号了而 $c_{\tilde{j}}(\gamma)$ 没有。

Lasso Modification
如果 $\tilde{\gamma} < \hat{\gamma}$,在 $\gamma=\tilde{\gamma}$ 时停止正在进行的LARS步进,同时从下一次的方向计算中去除$\tilde{j}$,即
$$\hat{\boldsymbol{\mu}}_{\mathcal{A}_+}=\hat{\boldsymbol{\mu}}_{\mathcal{A}}+\tilde{\gamma}\mathbf{u}_{\mathcal{A}}\quad\text{and}\quad\mathcal{A}_+=\mathcal{A}-\{\hat{j}\}\tag{31}$$
而不是(21)式。

————————————————————————
在Lasso Modification下,并假定满足“一次一个”的原则,则LARS算法可以产生Lasso的所有解。
————————————————————————

在原先的LARS算法过程中,“活跃集” $\mathcal{A}$ 的大小是单调增大的,而改动后则允许 $\mathcal{A}$ 变小。“一次一个”原则意味着每次只能增加或减少至多1个索引 $j$ 。

上图中的Lasso子图实际是用改动后的LARS算法计算出来的。(31)式的改动只在一处起了作用,即右图中箭头所指处( $\beta_7$ 变号)。此时 $\mathcal{A}$ 包含所有10个索引,然后 $\mathcal{A}_+=\mathcal{A}-\{7\}$。在下一步LARS步骤中,变量7又被重新加入到“活跃集”中。之后,算法继续运行直到达到OLS解。变量7的短暂离开对其他变量系数的变化轨迹产生了影响,最明显的就是 $\hat{\beta}_8$ 。与原始版本的LARS算法相比,Lasso使用了12步,比LARS多用了2步。对更复杂的模型,增加的开销会更大。

LARS 与 Forward Stagewise

我们考虑一个理想的阶进算法模型,即 $\epsilon\to0$。当 $m=2$ 时,理想阶进算法和LARS时产生的路径总是相同的(见前一篇文章中的阶梯状的图,想象 $\epsilon\to0$ 时,每一级阶梯会变得很小,直到和LARS的路径重合)。当 $m>2$ 时,必须要对LARS算法做改动才能使它得到阶进算法的解。这一部分的所有证明参见参考资料1的Section6。

假设阶进算法已经从前一步估计 $\hat{\boldsymbol{\mu}}$ 走了 $N$ 步,每一步步长为无穷小的 $\epsilon$,并且有
$$N_j=\text{ # \{ steps with selected index $j$ \}},\quad j=1,2,\cdots,m\tag{32}$$
很容易证明,对不在“活跃集” $\mathcal{A}$ 中的 $j$ 有 $N_j=0$。令
$$P\equiv(N_1,N_2,\cdots,N_m)/N\tag{33}$$
记 $P_{\mathcal{A}}$ 代表集合 $\mathcal{A}$ 对应的向量 $P$,则新的估计值为
$$\boldsymbol{\mu}=\hat{\boldsymbol{\mu}}+N\epsilon X_{\mathcal{A}}P_{\mathcal{A}}\tag{34}$$
注意到阶进算法每一步都是沿着方向 $s_j\mathbf{x}_j$,而LARS算法则是
$$\boldsymbol{\mu}_{\mathcal{A}}+\gamma X_{\mathcal{A}}w_{\mathcal{A}}\quad\text{where}\quad w_{\mathcal{A}}=A_{\mathcal{A}}\mathcal{\mathcal{A}}^{-1}1_{\mathcal{A}}\tag{35}$$
比较(34)式和(35)式,我们发现如果 $w_{\mathcal{A}}$ 有负分量的时候,LARS是不可能与阶进算法一致的,因为 $P_{\mathcal{A}}$ 各分量均是非负的。换句话说,阶进算法前进的方向必须在 $X_{\mathcal{A}}$ 的所有列张成的凸锥(convex cone) $\mathcal{C}_{\mathcal{A}}$ 里
$$\mathcal{C}_{\mathcal{A}}=\left\{\mathbf{v}=\sum_{j\in\mathcal{A}}s_j\mathbf{x}_jP_j, P_j\ge 0\right\}\tag{36}$$
如果 $\mathbf{u}_{\mathcal{A}} \in \mathcal{C}_{\mathcal{A}}$,那么LARS和阶进算法是一致的;否则,就需要用 $\mathbf{u}_{\mathcal{A}}$ 在 $\mathcal{C}_{\mathcal{A}}$ 上的投影来代替 $\mathbf{u}_{\mathcal{A}}$。

Stagewise Modification
按(17)式到(22)式进行,除了要把 $\mathbf{u}_{\mathcal{A}}$ 替换成 $\mathbf{u}_{\hat{\mathcal{B}}}$ ———— $\mathbf{u}_{\mathcal{A}}$ 在 $\mathcal{C}_{\mathcal{A}}$ 上投影方向的单位向量(见下图)。

阶进算法允许“活跃集”一次减少一个以上的索引。在之前的例子中,这发生在箭头所指处,如下图

活跃集从 $\mathcal{A}=\{3,9,4,7,2,10,5,8\}$ 变成了 $\hat{\mathcal{B}}=\mathcal{A}-\{3,7\}$。改动的LARS算法一共花了13步到达最终的OLS解,对于更复杂的模型,增加的开销会更多。
阶进改动的LARS算法中,前后两次估计值的差为
$$\hat{\boldsymbol{\mu}}_{\mathcal{A}_+}-\hat{\boldsymbol{\mu}}_{\mathcal{A}}=\hat{\gamma}\mathbf{u}_{\hat{\mathcal{B}}}=\hat{\gamma}X_{\hat{\mathcal{B}}}w_{\hat{\mathcal{B}}}\tag{37}$$
因为 $\mathbf{u}_{\hat{\mathcal{B}}}$ 在凸锥 $\mathcal{C}_{\mathcal{A}}$ 中,所以 $w_{\hat{\mathcal{B}}}$ 的分量一定都是非负的。这意味着对 $j\in\hat{\mathcal{B}}$ 满足
$$\text{sign}(\hat{\beta}_{+j}-\hat{\beta}_{j})=s_j\tag{38}$$

至此,我们可以对LARS、lasso和阶进算法做一个总的比较:

  • Stagewise:前后两步中 $\hat{\beta}_j$ 的差值与当前相关度 $\hat{c}_j$ 同号
  • Lasso:$\hat{\beta}_j$ 与 $\hat{c}_j$ 同号
  • LARS:没有符号约束

从另一方面看,Lasso和阶进算法都可以视为限制版本的LARS算法。

  • For Lasso:从LARS算法开始。如果某个系数跨越了0,停止。删除对应的变量,重新计算最佳方向,继续。
  • For forward stagewise:从LARS算法开始。在每一步计算最佳方向,如果某个变量(索引为 $j$ )的方向与相关度 $\text{corr($r,x_j$)}$ 的符号不同,将这个方向投影到“正锥”上,使用投影方向继续。

    参考资料

  1. Least Angle Regression
  2. Least Angle Regression,Forward Stagewise and the Lasso