分析101

最小角回归详解

2021-06-29  本文已影响0人  Boye0212

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

1 算法介绍

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

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

2 算法性质

2.1 保持最小角

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

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

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

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

由于\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,即内积与j无关。再由\text{RSS}=(y-Py)'(y-Py)=N-y'Py可知y'Py=N-\text{RSS}

相关系数的绝对值
\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的增加,同比例地减小,并且\lambda(0)=\lambda\lambda(1)=0

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

2.2 参数更新

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

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

此时更新方向为u_kX_{\mathcal{A}_k}' u_k=1_{k-1}\hat C,并取a\equiv X' u_k。更新的规则为\hat y_{\mathcal{A}_k}(\alpha)= \hat y_{\mathcal{A}_k}+\alpha u_k。因此,任一predictor,与当前残差的内积就为c_j(\alpha)=\hat c_j-\alpha a_j,而对于j\in \mathcal{A}_k,有\left| c_j(\alpha)\right|=\hat C-\alpha \hat C

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

由于|\hat c_j|\lt \hat C,因此只需考虑\hat c_ja_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}

注意到
\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}
因此,当\hat c_j\gt a_j时,除非a_j\lt -\hat C\dfrac{\hat C+\hat c_j}{\hat C+a_j}\lt 0,否则必有\dfrac{\hat C-\hat c_j}{\hat C-a_j} \lt \dfrac{\hat C+\hat c_j}{\hat C+a_j}。反之,当\hat c_j\leq a_j时,除非a_j\gt \hat C\dfrac{\hat C-\hat c_j}{\hat C-a_j}\lt 0,否则必有\dfrac{\hat C-\hat c_j}{\hat C-a_j} \geq \dfrac{\hat C+\hat c_j}{\hat 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\}^+
其中\{\}^+表示只对其中正的元素有效,而丢弃负的元素。

3 LAR与LASSO

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

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

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

为什么会出现与LASSO解不同的情况?我们注意到,对于LASSO的active set \mathcal{B}中的predictor,它的系数需要满足
x_{\cdot j}'(y-X\hat\beta) = \lambda \text{sign}(\hat\beta_j)
而对于LAR的active set \mathcal{A}中的predictor,它的系数需要满足
x_{\cdot j}'(y-X\hat\beta) = \gamma s_j
其中s_j为左边内积的符号。

在正常情况下,上面二者的右侧是相等的,也因此LAR的解就是LASSO的解。但是,当一个非零系数要穿过0时,它不再满足LASSO的解条件,因此会被踢出\mathcal{B},而LAR的解条件却可能没有突变(因为s_j是由内积的符号而非系数的符号决定的)。在系数到达0时,它满足
x_{\cdot j}'(y-X\hat\beta) \leq \lambda
这恰恰与\mathcal{A}^c中的predictor的条件一致,因此可以将它也踢出\mathcal{A},这样就让LAR与LASSO相一致了。

参考文献

上一篇下一篇

猜你喜欢

热点阅读