本文介绍LAR(Least angle regression,最小角回归),由Efron等(2004)提出。这是一种非常有效的求解LASSO的算法,可以得到LASSO的解的路径。
1 算法介绍
我们直接看最基本的LAR算法,假设有N N N 个样本,自变量是p p p 维的:
先对X X X (N × p N\times p N × p )做标准化处理,使得每个predictor(X X X 的每列)满足x ⋅ j ′ 1 N = 0 x_{\cdot j}' 1_N=0 x ⋅ j ′ 1 N = 0 ,∥ x ⋅ j ∥ = 1 \Vert x_{\cdot j}\Vert=1 ∥ x ⋅ j ∥ = 1 。我们先假设回归模型中只有截距项,则β 0 = 1 N y ′ 1 N \beta_0=\dfrac{1}{N} y' 1_N β 0 = N 1 y ′ 1 N ,记残差r = y − 1 N β 0 r=y-1_N \beta_0 r = y − 1 N β 0 ,而其他的系数β 1 = ⋯ = β p = 0 \beta_1=\cdots=\beta_p=0 β 1 = ⋯ = β p = 0 ;
找出与r r r 相关性最大的x ⋅ j x_{\cdot j} x ⋅ j ,加入active set;
将β j \beta_j β j 从0 0 0 逐步向LS系数x ⋅ j ′ r x_{\cdot j}'r x ⋅ j ′ r 变动,直到 有另一个x ⋅ k x_{\cdot k} x ⋅ k ,它与r r r 的相关系数绝对值,和x ⋅ j x_{\cdot j} x ⋅ j 与r r r 的相关系数绝对值一样大;
将β j \beta_j β j 和β k \beta_k β k 同时 向二者的联合LS系数变动,直到再出现下一个x ⋅ l x_{\cdot l} x ⋅ l ,它与r r r 的相关系数满足上一步的条件;
重复上述过程,min ( N − 1 , p ) \min(N-1,p) min ( N − 1 , p ) 步后,就得到完整的LS解。
2 算法性质
2.1 保持最小角
我们先来看LS估计量的一个性质:若每个predictor与y y y 的相关系的数绝对值相等,从此时开始,将所有系数的估计值同步地从0 0 0 移向LS估计量,在这个过程中,每个predictor与残差向量的相关系数会同比例地减少。
假设我们标准化了每个predictor和y y y ,使他们均值为0 0 0 ,标准差为1 1 1 。在这里的设定中,对于任意j = 1 , … , p j=1,\ldots,p j = 1 , … , p ,都有∣ x ⋅ j ′ y ∣ / N = λ \left|x_{\cdot j}'y\right|/N=\lambda ∣ ∣ x ⋅ j ′ y ∣ ∣ / N = λ ,其中λ \lambda λ 为常数。LS估计量β ^ = ( X ′ X ) − 1 X ′ y \hat\beta=(X'X)^{-1}X'y β ^ = ( X ′ X ) − 1 X ′ y ,当我们将系数从0 0 0 向β ^ \hat\beta β ^ 移动了α \alpha α (α ∈ [ 0 , 1 ] \alpha\in[0,1] α ∈ [ 0 , 1 ] )比例时,记拟合值为u ( α ) = α X β ^ u(\alpha)=\alpha X\hat\beta u ( α ) = α X β ^ 。
另外,记ℓ p ( j ) \ell_p^{(j)} ℓ p ( j ) 为只有第j j j 个元素为1 1 1 、其他元素均为0 0 0 的p p p 维向量,则x ⋅ j = X ℓ p ( j ) x_{\cdot j}=X\ell_p^{(j)} x ⋅ j = X ℓ p ( j ) ,再记RSS = ∥ y − X β ^ ∥ 2 \text{RSS}=\Vert y-X\hat\beta\Vert^2 RSS = ∥ y − X β ^ ∥ 2 ,记投影矩阵P = X ( X ′ X ) − 1 X ′ P=X(X'X)^{-1}X' P = X ( X ′ X ) − 1 X ′ 。
这里的问题是,在α \alpha α 变大过程中,每一个x ⋅ j x_{\cdot j} x ⋅ j 与新的残差的相关系数,是否始终保持相等?且是否会减小?
由于∣ x ⋅ j ′ [ y − u ( α ) ] ∣ = ∣ x ⋅ j ′ y − ℓ p ( j ) ′ X ′ u ( α ) ∣ = ( 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 ∣ ∣ x ⋅ j ′ [ y − u ( α )] ∣ ∣ = ∣ ∣ x ⋅ j ′ y − ℓ p ( j ) ′ X ′ u ( α ) ∣ ∣ = ( 1 − α ) N λ ,即内积与j j j 无关。再由RSS = ( y − P y ) ′ ( y − P y ) = N − y ′ P y \text{RSS}=(y-Py)'(y-Py)=N-y'Py RSS = ( y − P y ) ′ ( y − P y ) = N − y ′ P y 可知y ′ P y = N − RSS y'Py=N-\text{RSS} y ′ P y = N − RSS 。
相关系数的绝对值
λ ( α ) = ∣ x ⋅ j ′ [ y − u ( α ) ] ∣ ∥ x ⋅ j ∥ ∥ y − u ( α ) ∥ = ( 1 − α ) N λ N [ y − u ( α ) ] ′ [ y − u ( α ) ] = ( 1 − α ) N λ N N ( 1 − α ) 2 + ( 2 α − α 2 ) RSS = { λ 1 + [ − 1 + 1 ( 1 − α ) 2 ] RSS N , α ∈ [ 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} λ ( α ) = = = = ∥ x ⋅ j ∥∥ y − u ( α ) ∥ ∣ ∣ x ⋅ j ′ [ y − u ( α )] ∣ ∣ N [ y − u ( α ) ] ′ [ y − u ( α )] ( 1 − α ) N λ N N ( 1 − α ) 2 + ( 2 α − α 2 ) RSS ( 1 − α ) N λ ⎩ ⎨ ⎧ 1 + [ − 1 + ( 1 − α ) 2 1 ] N RSS λ , 0 , α ∈ [ 0 , 1 ) α = 1
因此,任意predictor与当前残差的相关系数绝对值,会随着α \alpha α 的增加,同比例地减小,并且λ ( 0 ) = λ \lambda(0)=\lambda λ ( 0 ) = λ ,λ ( 1 ) = 0 \lambda(1)=0 λ ( 1 ) = 0 。
现在,我们再回顾一下LAR的过程。在第k k k 步开始时,将所有active set中的predictor的集合记为A k \mathcal{A}_k A k ,此时在上一步估计完成的系数为β ^ A k \hat\beta_{\mathcal{A}_k} β ^ A k ,它是k − 1 k-1 k − 1 维且每个维度都非零的向量,记此时残差为r k = y − X A k β ^ A k r_k=y-X_{\mathcal{A}_k}\hat\beta_{\mathcal{A}_k} r k = y − X A k β ^ A k ,用r k r_k r k 对X A k X_{\mathcal{A}_k} X A k 做回归后系数为δ k = ( X A k ′ X A k ) − 1 X A k ′ r k \delta_k=(X_{\mathcal{A}_k}'X_{\mathcal{A}_k})^{-1}X_{\mathcal{A}_k}' r_k δ k = ( X A k ′ X A k ) − 1 X A k ′ r k ,拟合值u k = X A k δ k u_k=X_{\mathcal{A}_k}\delta_k u k = X A k δ k 。另外,我们知道X A k ′ u k = X A k ′ r k X_{\mathcal{A}_k}'u_k=X_{\mathcal{A}_k}'r_k X A k ′ u k = X A k ′ r k ,而一个predictor加入A k \mathcal{A}_k A k 的条件就是它与当前r k r_k r k 的相关系数的绝对值等于A k \mathcal{A}_k A k 中的predictor与当前r k r_k r k 的相关系数的绝对值,所以X A k ′ r k X_{\mathcal{A}_k}' r_k X A k ′ r k 向量的每个维度的绝对值都相等,也即X A k ′ u k X_{\mathcal{A}_k}' u_k X A k ′ u k 的每个维度的绝对值都相等,u k u_k u k 就是与各个A k \mathcal{A}_k A k 中的predictor的角度都相等的向量,且与它们的角度是最小的,而u k u_k u k 也是下一步系数要更新的方向,这也是“最小角回归”名称的由来。
2.2 参数更新
那么,在这个过程中,是否需要每次都逐步小幅增加α \alpha α ,再检查有没有其他predictor与残差的相关系数绝对值?有没有快速的计算α \alpha α 的方法?答案是有的。
在第k k k 步的开始,A k \mathcal{A}_k A k 中有k − 1 k-1 k − 1 个元素,我们记c ^ = X ′ r k \hat c=X'r_k c ^ = X ′ r k ,其中r k = y − y ^ A k r_k=y-\hat y_{\mathcal{A}_k} r k = y − y ^ A k ,并记C ^ = max j { ∣ c ^ j ∣ } \hat C=\max_j \{\left|\hat c_j\right|\} C ^ = max j { ∣ c ^ j ∣ } ,此时的active set其实就是A k = { j : ∣ c ^ j ∣ = C ^ } \mathcal{A}_k=\{j:\left|\hat c_j\right|=\hat C\} A k = { j : ∣ c ^ j ∣ = C ^ } 。在这里,我们将X A k X_{\mathcal{A}_k} X A k 做个修改,记s j = sign ( c ^ j ) s_j=\text{sign}(\hat c_j) s j = sign ( c ^ j ) ,再令X A k = [ ⋯ s j x ⋅ j ⋯ ] j ∈ A k X_{\mathcal{A}_k}=[\cdots s_jx_{\cdot j}\cdots]_{j\in\mathcal{A}_k} X A k = [ ⋯ s j x ⋅ j ⋯ ] j ∈ A k 。
此时更新方向为u k u_k u k ,X A k ′ u k = 1 k − 1 C ^ X_{\mathcal{A}_k}' u_k=1_{k-1}\hat C X A k ′ u k = 1 k − 1 C ^ ,并取a ≡ X ′ u k a\equiv X' u_k a ≡ X ′ u k 。更新的规则为y ^ A k ( α ) = y ^ A k + α u k \hat y_{\mathcal{A}_k}(\alpha)= \hat y_{\mathcal{A}_k}+\alpha u_k y ^ A k ( α ) = y ^ A k + α u k 。因此,任一predictor,与当前残差的内积就为c j ( α ) = c ^ j − α a j c_j(\alpha)=\hat c_j-\alpha a_j c j ( α ) = c ^ j − α a j ,而对于j ∈ A k j\in \mathcal{A}_k j ∈ A k ,有∣ c j ( α ) ∣ = C ^ − α C ^ \left| c_j(\alpha)\right|=\hat C-\alpha \hat C ∣ c j ( α ) ∣ = C ^ − α C ^ 。
对于j ∈ A k c j\in \mathcal{A}_k^c j ∈ A k c ,如果要使x ⋅ j x_{\cdot j} x ⋅ j 与当前残差的相关系数绝对值,与在A k \mathcal{A}_k A k 中的predictor与当前残差的相关系数绝对值相等,也即它们的内积的绝对值相等,必须要满足∣ c ^ j − α a j ∣ = ( 1 − α ^ j ) C ^ |\hat c_j-\alpha a_j|=(1-\hat\alpha_j)\hat C ∣ c ^ j − α a j ∣ = ( 1 − α ^ j ) C ^ 。问题转化为了求解使它们相等的α ^ j \hat\alpha_j α ^ j ,并对于所有的j ∈ A k c j\in \mathcal{A}_k^c j ∈ A k c ,最小的α ^ j \hat\alpha_j α ^ j 即为最后的更新步长。
由于∣ c ^ j ∣ < C ^ |\hat c_j|\lt \hat C ∣ c ^ j ∣ < C ^ ,因此只需考虑c ^ j \hat c_j c ^ j 与a j a_j a j 的大小关系即可。最后解为
α ^ j = { C ^ − c ^ j C ^ − a j , c ^ j > a j C ^ + c ^ j C ^ + a j , c ^ j ≤ a j \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} α ^ j = ⎩ ⎨ ⎧ C ^ − a j C ^ − c ^ j , C ^ + a j C ^ + c ^ j , c ^ j > a j c ^ j ≤ a j
注意到
C ^ − c ^ j C ^ − a j − C ^ + c ^ j C ^ + a j = 2 C ^ ( a j − c ^ j ) C ^ 2 − a j 2 \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 ^ − a j C ^ − c ^ j − C ^ + a j C ^ + c ^ j = C ^ 2 − a j 2 2 C ^ ( a j − c ^ j )
因此,当c ^ j > a j \hat c_j\gt a_j c ^ j > a j 时,除非a j < − C ^ a_j\lt -\hat C a j < − C ^ 即C ^ + c ^ j C ^ + a j < 0 \dfrac{\hat C+\hat c_j}{\hat C+a_j}\lt 0 C ^ + a j C ^ + c ^ j < 0 ,否则必有C ^ − c ^ j C ^ − a j < C ^ + c ^ j C ^ + a j \dfrac{\hat C-\hat c_j}{\hat C-a_j} \lt \dfrac{\hat C+\hat c_j}{\hat C+a_j} C ^ − a j C ^ − c ^ j < C ^ + a j C ^ + c ^ j 。反之,当c ^ j ≤ a j \hat c_j\leq a_j c ^ j ≤ a j 时,除非a j > C ^ a_j\gt \hat C a j > C ^ 即C ^ − c ^ j C ^ − a j < 0 \dfrac{\hat C-\hat c_j}{\hat C-a_j}\lt 0 C ^ − a j C ^ − c ^ j < 0 ,否则必有C ^ − c ^ j C ^ − a j ≥ C ^ + c ^ j C ^ + a j \dfrac{\hat C-\hat c_j}{\hat C-a_j} \geq \dfrac{\hat C+\hat c_j}{\hat C+a_j} C ^ − a j C ^ − c ^ j ≥ C ^ + a j C ^ + c ^ j 。综上所述,上面的解可以写为
α ^ = min j ∈ A k c { C ^ − c ^ j C ^ − a j , C ^ + c ^ j C ^ + a j } + \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\}^+ α ^ = j ∈ A k c min { C ^ − a j C ^ − c ^ j , C ^ + a j C ^ + c ^ j } +
其中{ } + \{\}^+ { } + 表示只对其中正的元素有效,而丢弃负的元素。
3 LAR与LASSO
LAR虽然是求解LASSO的算法,但它得到的解的路径,在出现了某个系数要穿过0 0 0 的情况时,有可能与LASSO不一样。因此,想要完全得到LASSO的解的路径,还需要做修正。
我们在第1节算法的第4步中加入一个规则:
若一个非零系数又变为了0 0 0 ,将该predictor从active set中剔除,重新计算当前的LS解作为更新方向。
在修正后,LAR就可以解任意LASSO问题,包括p ≫ N p\gg N p ≫ N 的问题。
为什么会出现与LASSO解不同的情况?我们注意到,对于LASSO的active set B \mathcal{B} B 中的predictor,它的系数需要满足
x ⋅ j ′ ( y − X β ^ ) = λ sign ( β ^ j ) x_{\cdot j}'(y-X\hat\beta) = \lambda \text{sign}(\hat\beta_j) x ⋅ j ′ ( y − X β ^ ) = λ sign ( β ^ j )
而对于LAR的active set A \mathcal{A} A 中的predictor,它的系数需要满足
x ⋅ j ′ ( y − X β ^ ) = γ s j x_{\cdot j}'(y-X\hat\beta) = \gamma s_j x ⋅ j ′ ( y − X β ^ ) = γ s j
其中s j s_j s j 为左边内积的符号。
在正常情况下,上面二者的右侧是相等的,也因此LAR的解就是LASSO的解。但是,当一个非零系数要穿过0 0 0 时,它不再满足LASSO的解条件,因此会被踢出B \mathcal{B} B ,而LAR的解条件却可能没有突变(因为s j s_j s j 是由内积的符号而非系数的符号决定的)。在系数到达0 0 0 时,它满足
x ⋅ j ′ ( y − X β ^ ) ≤ λ x_{\cdot j}'(y-X\hat\beta) \leq \lambda x ⋅ j ′ ( y − X β ^ ) ≤ λ
这恰恰与A c \mathcal{A}^c A c 中的predictor的条件一致,因此可以将它也踢出A \mathcal{A} 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.