在介绍最小角回归之前,需要先看看两个预备算法:
- 前向选择算法
- 前向梯度算法
前向选择算法
前向选择算法的原理是一种典型的贪心算法。要解决的问题是:
对于 Y = X θ Y=X\theta Y=Xθ这样的线性关系,如何求解系数 θ \theta θ。其中 Y Y Y是 m ∗ 1 m*1 m∗1的向量, X X X是 m ∗ n m*n m∗n的矩阵, θ \theta θ为 n ∗ 1 n*1 n∗1的向量。 m m m为样本数量, n n n为特征维度。
把矩阵
X
X
X看成
n
n
n个
m
∗
1
m*1
m∗1的向量
X
i
(
i
=
1
,
2
,
.
.
.
,
n
)
X_i(i=1,2,...,n)
Xi(i=1,2,...,n)。在这
n
n
n个向量中选择一个与目标
Y
Y
Y的余弦距离最大的一个
X
k
X_k
Xk,用
X
k
X_k
Xk来逼近
Y
Y
Y,得到下式:
Y
‾
=
X
k
θ
k
\overline Y=X_k\theta_k
Y=Xkθk,其中
θ
k
=
<
X
k
,
Y
>
∣
∣
X
k
∣
∣
2
\theta_k=\frac {<X_k,Y>}{||X_k||_2}
θk=∣∣Xk∣∣2<Xk,Y>
即 Y ‾ \overline Y Y是 Y Y Y在 X k X_k Xk上的投影。那么,可以定义残差: Y y e s = Y − Y ‾ Y_{yes}=Y-\overline Y Yyes=Y−Y。由于是投影,可知 Y y e s Y_{yes} Yyes和 X k X_k Xk是正交的。再以 Y y e s Y_{yes} Yyes作为新的因变量,去掉 X k X_k Xk后的剩下的自变量的集合 X i ( i = 1 , 2 , . . . , k − 1 , k + 1 , . . . , n ) X_i(i=1,2,...,k-1,k+1,...,n) Xi(i=1,2,...,k−1,k+1,...,n)作为新的自变量集合,重复刚才投影和残差的操作,直到残差为0,或者所有的自变量都用完了,才停止算法。
当 X X X只有2维时,如上图所示,和 Y Y Y最接近的是 X 1 X_1 X1,首先在 X 1 X_1 X1上投影,残差如上图长虚线。此时 X 1 θ 1 X_1\theta_1 X1θ1模拟了 Y Y Y, θ 1 \theta_1 θ1模拟了 θ \theta θ(仅仅模拟了一个维度)。接着发现最接近的是 X 2 X_2 X2,此时用残差接着在 X 2 X_2 X2投影,残差为图中短虚线。由于没有其他自变量了,此时 x 1 θ 1 + x 2 θ 2 x_1\theta_1+x_2\theta_2 x1θ1+x2θ2模拟了 Y Y Y,对应的模拟了两个维度的 θ \theta θ即为最终结果。
此算法对每个变量只需执行一次操作,效率高,运算快。但,当自变量不是正交的时候,每次都在做投影,所以算法只能给出一个局部近似解。这个简单的算法太粗糙,不能直接用于Lasso回归。
前向梯度算法
前向梯度算法和前向选择算法有类似的地方,也是在 n n n个 X i X_i Xi中选择和目标 Y Y Y最为接近(余弦距离最大)的一个变量 X k X_k Xk,用 X k X_k Xk来逼近 Y Y Y。但前向梯度算法不是粗暴的用投影,而是每次在最为接近的自变量 X t X_t Xt的方向移动一小步,然后再看残差 Y y e s Y_{yes} Yyes和哪个 X i X_i Xi最为接近。此时我们也不会把 X t X_t Xt去除,因为我们只前进了一小步,有可能下面最接近的自变量还是 X t X_t Xt。如此进行下去,直到残差 Y y e s Y_yes Yyes减小到足够小,算法停止。
当 X X X只有2维时,例子如上图,和 Y Y Y最接近的是 X 1 X_1 X1,首先在 X 1 X_1 X1上面走一小段距离,此处 ϵ \epsilon ϵ为一个较小的常量,发现此时的残差还是和 X 1 X_1 X1最接近。那么接着沿 X 1 X_1 X1走,一直走到发现残差不是和 X 1 X_1 X1最接近,而是和 X 2 X_2 X2最接近,此时残差如上图长虚线。接着沿着 X 2 X_2 X2走一小步,发现残差此时又和 X 1 X_1 X1最接近,那么开始沿着 X 1 X_1 X1走,走完一步后发现残差为0,那么算法停止。此时 Y Y Y由刚才所有的所有步相加而模拟,对应的算出的系数 θ \theta θ即为最终结果。
最小角回归算法
最小角回归对前向梯度和前向选择做了这种,保留了前向梯度算法一定程度上的精确性,同时简化了前向梯度算法一步步迭代的过程:
首先,找到与因变量 Y Y Y最接近或相关度最高的自变量 X k X_k Xk,使用类似于前向梯度算法中的残差计算方法,得到新的目标 Y y e s Y_yes Yyes,此时不用和前向梯度算法一样小步小步的走,而是直接向前走直到出现一个 X t X_t Xt,使得 X t X_t Xt和 Y ( y e s ) Y_{(yes)} Y(yes)的相关度和 X k X_k Xk与 Y ( y e s ) Y_{(yes)} Y(yes)的相关度是一样的,此时残差 Y y e s Y_{yes} Yyes就在 X t X_t Xt和 X k X_k Xk的角平分线上,此时我们开始沿着这个残差角平分线走,直到出现第三个特征 X p X_p Xp和 Y y e s Y_yes Yyes的相关度等于 θ t , θ k \theta_t,\theta_k θt,θk与 Y y e s Y_{yes} Yyes的一样。将其也加入到 Y Y Y的逼近特征集合中,并用 Y Y Y的逼近特征集合的共同角分线,作为新的逼近方向,循环直到 Y y e s Y_{yes} Yyes足够小或者所有变量都取完位置。
当 θ \theta θ只有2维时。例子如上图,和 Y Y Y最接近的是 X 1 X_1 X1,首先在 X 1 X_1 X1上走一段距离,直到残差在 X 1 X_1 X1和 X 2 X_2 X2的角平分线上,此时沿着角平分线走,直到残差足够小才停止。此时对应的系数 β \beta β即为最终的结果。
最小角回归法是一个适用于高维数据的回归算法,其主要的优点有:
1)特别适合于特征维度n 远高于样本数m的情况。
2)算法的最坏计算复杂度和最小二乘法类似,但是其计算速度几乎和前向选择算法一样
3)可以产生分段线性结果的完整路径,这在模型的交叉验证中极为有用
主要的缺点是:
由于LARS的迭代方向是根据目标的残差而定,所以该算法对样本的噪声极为敏感