最小角回归详解

488 阅读5分钟

本文介绍LAR(Least angle regression,最小角回归),由Efron等(2004)提出。这是一种非常有效的求解LASSO的算法,可以得到LASSO的解的路径。

1 算法介绍

我们直接看最基本的LAR算法,假设有NN个样本,自变量是pp维的:

  1. 先对XXN×pN\times p)做标准化处理,使得每个predictor(XX的每列)满足xj1N=0x_{\cdot j}' 1_N=0xj=1\Vert x_{\cdot j}\Vert=1。我们先假设回归模型中只有截距项,则β0=1Ny1N\beta_0=\dfrac{1}{N} y' 1_N,记残差r=y1Nβ0r=y-1_N \beta_0,而其他的系数β1==βp=0\beta_1=\cdots=\beta_p=0
  2. 找出与rr相关性最大的xjx_{\cdot j},加入active set;
  3. βj\beta_j00逐步向LS系数xjrx_{\cdot j}'r变动,直到有另一个xkx_{\cdot k},它与rr的相关系数绝对值,和xjx_{\cdot j}rr的相关系数绝对值一样大;
  4. βj\beta_jβk\beta_k同时向二者的联合LS系数变动,直到再出现下一个xlx_{\cdot l},它与rr的相关系数满足上一步的条件;
  5. 重复上述过程,min(N1,p)\min(N-1,p)步后,就得到完整的LS解。

2 算法性质

2.1 保持最小角

我们先来看LS估计量的一个性质:若每个predictor与yy的相关系的数绝对值相等,从此时开始,将所有系数的估计值同步地从00移向LS估计量,在这个过程中,每个predictor与残差向量的相关系数会同比例地减少。

假设我们标准化了每个predictor和yy,使他们均值为00,标准差为11。在这里的设定中,对于任意j=1,,pj=1,\ldots,p,都有xjy/N=λ\left|x_{\cdot j}'y\right|/N=\lambda,其中λ\lambda为常数。LS估计量β^=(XX)1Xy\hat\beta=(X'X)^{-1}X'y,当我们将系数从00β^\hat\beta移动了α\alphaα[0,1]\alpha\in[0,1])比例时,记拟合值为u(α)=αXβ^u(\alpha)=\alpha X\hat\beta

另外,记p(j)\ell_p^{(j)}为只有第jj个元素为11、其他元素均为00pp维向量,则xj=Xp(j)x_{\cdot j}=X\ell_p^{(j)},再记RSS=yXβ^2\text{RSS}=\Vert y-X\hat\beta\Vert^2,记投影矩阵P=X(XX)1XP=X(X'X)^{-1}X'

这里的问题是,在α\alpha变大过程中,每一个xjx_{\cdot j}与新的残差的相关系数,是否始终保持相等?且是否会减小?

由于xj[yu(α)]=xjyp(j)Xu(α)=(1α)Nλ\left| x_{\cdot j}' [y-u(\alpha)]\right|=\left|x_{\cdot j}'y - \ell_p^{(j)\prime} X' u(\alpha)\right|=(1-\alpha)N\lambda,即内积与jj无关。再由RSS=(yPy)(yPy)=NyPy\text{RSS}=(y-Py)'(y-Py)=N-y'Py可知yPy=NRSSy'Py=N-\text{RSS}

相关系数的绝对值

λ(α)=xj[yu(α)]xjyu(α)=(1α)NλN[yu(α)][yu(α)]=(1α)NλNN(1α)2+(2αα2)RSS={λ1+[1+1(1α)2]RSSN,α[0,1)0,α=1\begin{aligned} \lambda(\alpha)=& \dfrac{\left| x_{\cdot j}' [y-u(\alpha)]\right|}{\Vert x_{\cdot j}\Vert \Vert y-u(\alpha)\Vert}\\ =& \dfrac{(1-\alpha)N\lambda}{\sqrt{N} \sqrt{[y-u(\alpha)]'[y-u(\alpha)]}}\\ =& \dfrac{(1-\alpha)N\lambda}{\sqrt{N} \sqrt{N(1-\alpha)^2+(2\alpha-\alpha^2)\text{RSS}}}\\ =& \begin{cases} \dfrac{\lambda}{\sqrt{1+\left[-1+\dfrac{1}{(1-\alpha)^2}\right]\dfrac{\text{RSS}}{N}}},&\alpha\in [0,1)\\ 0,&\alpha=1 \end{cases} \end{aligned}

因此,任意predictor与当前残差的相关系数绝对值,会随着α\alpha的增加,同比例地减小,并且λ(0)=λ\lambda(0)=\lambdaλ(1)=0\lambda(1)=0

现在,我们再回顾一下LAR的过程。在第kk步开始时,将所有active set中的predictor的集合记为Ak\mathcal{A}_k,此时在上一步估计完成的系数为β^Ak\hat\beta_{\mathcal{A}_k},它是k1k-1维且每个维度都非零的向量,记此时残差为rk=yXAkβ^Akr_k=y-X_{\mathcal{A}_k}\hat\beta_{\mathcal{A}_k},用rkr_kXAkX_{\mathcal{A}_k}做回归后系数为δk=(XAkXAk)1XAkrk\delta_k=(X_{\mathcal{A}_k}'X_{\mathcal{A}_k})^{-1}X_{\mathcal{A}_k}' r_k,拟合值uk=XAkδku_k=X_{\mathcal{A}_k}\delta_k。另外,我们知道XAkuk=XAkrkX_{\mathcal{A}_k}'u_k=X_{\mathcal{A}_k}'r_k,而一个predictor加入Ak\mathcal{A}_k的条件就是它与当前rkr_k的相关系数的绝对值等于Ak\mathcal{A}_k中的predictor与当前rkr_k的相关系数的绝对值,所以XAkrkX_{\mathcal{A}_k}' r_k向量的每个维度的绝对值都相等,也即XAkukX_{\mathcal{A}_k}' u_k的每个维度的绝对值都相等,uku_k就是与各个Ak\mathcal{A}_k中的predictor的角度都相等的向量,且与它们的角度是最小的,而uku_k也是下一步系数要更新的方向,这也是“最小角回归”名称的由来。

2.2 参数更新

那么,在这个过程中,是否需要每次都逐步小幅增加α\alpha,再检查有没有其他predictor与残差的相关系数绝对值?有没有快速的计算α\alpha的方法?答案是有的。

在第kk步的开始,Ak\mathcal{A}_k中有k1k-1个元素,我们记c^=Xrk\hat c=X'r_k,其中rk=yy^Akr_k=y-\hat y_{\mathcal{A}_k},并记C^=maxj{c^j}\hat C=\max_j \{\left|\hat c_j\right|\},此时的active set其实就是Ak={j:c^j=C^}\mathcal{A}_k=\{j:\left|\hat c_j\right|=\hat C\}。在这里,我们将XAkX_{\mathcal{A}_k}做个修改,记sj=sign(c^j)s_j=\text{sign}(\hat c_j),再令XAk=[sjxj]jAkX_{\mathcal{A}_k}=[\cdots s_jx_{\cdot j}\cdots]_{j\in\mathcal{A}_k}

此时更新方向为uku_kXAkuk=1k1C^X_{\mathcal{A}_k}' u_k=1_{k-1}\hat C,并取aXuka\equiv X' u_k。更新的规则为y^Ak(α)=y^Ak+αuk\hat y_{\mathcal{A}_k}(\alpha)= \hat y_{\mathcal{A}_k}+\alpha u_k。因此,任一predictor,与当前残差的内积就为cj(α)=c^jαajc_j(\alpha)=\hat c_j-\alpha a_j,而对于jAkj\in \mathcal{A}_k,有cj(α)=C^αC^\left| c_j(\alpha)\right|=\hat C-\alpha \hat C

对于jAkcj\in \mathcal{A}_k^c,如果要使xjx_{\cdot j}与当前残差的相关系数绝对值,与在Ak\mathcal{A}_k中的predictor与当前残差的相关系数绝对值相等,也即它们的内积的绝对值相等,必须要满足c^jαaj=(1α^j)C^|\hat c_j-\alpha a_j|=(1-\hat\alpha_j)\hat C。问题转化为了求解使它们相等的α^j\hat\alpha_j,并对于所有的jAkcj\in \mathcal{A}_k^c,最小的α^j\hat\alpha_j即为最后的更新步长。

由于c^j<C^|\hat c_j|\lt \hat C,因此只需考虑c^j\hat c_jaja_j的大小关系即可。最后解为

α^j={C^c^jC^aj,c^j>ajC^+c^jC^+aj,c^jaj\hat\alpha_j=\begin{cases} \dfrac{\hat C-\hat c_j}{\hat C-a_j}, & \hat c_j\gt a_j\\ \dfrac{\hat C+\hat c_j}{\hat C+a_j}, & \hat c_j\leq a_j\\ \end{cases}

注意到 C^c^jC^ajC^+c^jC^+aj=2C^(ajc^j)C^2aj2\dfrac{\hat C-\hat c_j}{\hat C-a_j}-\dfrac{\hat C+\hat c_j}{\hat C+a_j}=\dfrac{2\hat C(a_j-\hat c_j)}{\hat C^2-a_j^2} 因此,当c^j>aj\hat c_j\gt a_j时,除非aj<C^a_j\lt -\hat CC^+c^jC^+aj<0\dfrac{\hat C+\hat c_j}{\hat C+a_j}\lt 0,否则必有C^c^jC^aj<C^+c^jC^+aj\dfrac{\hat C-\hat c_j}{\hat C-a_j} \lt \dfrac{\hat C+\hat c_j}{\hat C+a_j}。反之,当c^jaj\hat c_j\leq a_j时,除非aj>C^a_j\gt \hat CC^c^jC^aj<0\dfrac{\hat C-\hat c_j}{\hat C-a_j}\lt 0,否则必有C^c^jC^ajC^+c^jC^+aj\dfrac{\hat C-\hat c_j}{\hat C-a_j} \geq \dfrac{\hat C+\hat c_j}{\hat C+a_j}。综上所述,上面的解可以写为

α^=minjAkc{C^c^jC^aj,C^+c^jC^+aj}+\hat \alpha=\min_{j\in \mathcal{A}_k^c}\left\{\dfrac{\hat C-\hat c_j}{\hat C-a_j},\dfrac{\hat C+\hat c_j}{\hat C+a_j}\right\}^+

其中{}+\{\}^+表示只对其中正的元素有效,而丢弃负的元素。

3 LAR与LASSO

LAR虽然是求解LASSO的算法,但它得到的解的路径,在出现了某个系数要穿过00的情况时,有可能与LASSO不一样。因此,想要完全得到LASSO的解的路径,还需要做修正。

我们在第1节算法的第4步中加入一个规则:

  • 若一个非零系数又变为了00,将该predictor从active set中剔除,重新计算当前的LS解作为更新方向。

在修正后,LAR就可以解任意LASSO问题,包括pNp\gg N的问题。

为什么会出现与LASSO解不同的情况?我们注意到,对于LASSO的active set B\mathcal{B}中的predictor,它的系数需要满足

xj(yXβ^)=λsign(β^j)x_{\cdot j}'(y-X\hat\beta) = \lambda \text{sign}(\hat\beta_j)

而对于LAR的active set A\mathcal{A}中的predictor,它的系数需要满足

xj(yXβ^)=γsjx_{\cdot j}'(y-X\hat\beta) = \gamma s_j

其中sjs_j为左边内积的符号。

在正常情况下,上面二者的右侧是相等的,也因此LAR的解就是LASSO的解。但是,当一个非零系数要穿过00时,它不再满足LASSO的解条件,因此会被踢出B\mathcal{B},而LAR的解条件却可能没有突变(因为sjs_j是由内积的符号而非系数的符号决定的)。在系数到达00时,它满足

xj(yXβ^)λx_{\cdot j}'(y-X\hat\beta) \leq \lambda

这恰恰与Ac\mathcal{A}^c中的predictor的条件一致,因此可以将它也踢出A\mathcal{A},这样就让LAR与LASSO相一致了。

参考文献

  • Efron, Bradley, Trevor Hastie, Iain Johnstone, and Robert Tibshirani. "Least angle regression." Annals of statistics 32, no. 2 (2004): 407-499.
  • Hastie, Trevor, Robert Tibshirani, and Jerome Friedman. The elements of statistical learning: data mining, inference, and prediction. Springer Science & Business Media, 2009.