\qquad 线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归。
1. 回顾线性回归
\qquad 首先我们简要回归下线性回归的一般形式: h θ ( x ) = X θ h_\theta(x)=X\theta hθ(x)=Xθ
\qquad 需要极小化的损失函数是: J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\theta) = \dfrac{1}{2}(X\theta-Y)^T(X\theta-Y) J(θ)=21(Xθ−Y)T(Xθ−Y)
\qquad
如果用梯度下降法求解,则每一轮
θ
\theta
θ迭代的表达式是:
θ
=
θ
−
α
X
T
(
X
θ
−
Y
)
\theta = \theta - \alpha X^T(X\theta-Y)
θ=θ−αXT(Xθ−Y)
\qquad
其中
α
\alpha
α为步长。
\qquad
如果用最小二乘法,则
θ
\theta
θ的结果是:
X
T
X
θ
−
X
T
Y
=
0
⇒
θ
=
(
X
T
X
)
−
1
X
T
Y
X^TX\theta-X^TY=0 \Rightarrow \theta = (X^TX)^{-1}X^TY
XTXθ−XTY=0⇒θ=(XTX)−1XTY
2. 回顾Ridge回归
\qquad
由于直接套用线性回归可能产生过拟合,我们需要加入正则化项,如果加入的是L2正则化项,就是Ridge回归,有时也翻译为岭回归、脊回归。它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和一个调节线性回归项和正则化项权重的系数
α
\alpha
α。损失函数表达式如下:
J
(
θ
)
=
1
2
(
X
θ
−
Y
)
T
(
X
θ
−
Y
)
+
1
2
α
∣
∣
θ
∣
∣
2
2
J(\theta) = \dfrac{1}{2}(X\theta-Y)^T(X\theta-Y) + \dfrac{1}{2}\alpha||\theta||_2^2
J(θ)=21(Xθ−Y)T(Xθ−Y)+21α∣∣θ∣∣22
\qquad
其中
α
\alpha
α为常数系数,需要进行调优。
∣
∣
θ
∣
∣
2
||\theta||_2
∣∣θ∣∣2为L2范数。 L2范数是指向量中各元素的平方和然后开根。
\qquad
Ridge回归的解法和一般线性回归大同小异。如果采用梯度下降法,则每一轮
θ
\theta
θ迭代的表达式是:
θ
=
θ
−
(
β
X
T
(
X
θ
−
Y
)
+
α
θ
)
\theta = \theta - (\beta X^T(X\theta-Y) + \alpha\theta)
θ=θ−(βXT(Xθ−Y)+αθ)
\qquad
其中
β
\beta
β为步长。
\qquad
如果用最小二乘法,则
θ
\theta
θ的结果是:
(
X
T
X
θ
−
X
T
Y
)
+
α
θ
=
0
⇒
θ
=
(
X
T
X
+
α
E
)
−
1
X
T
Y
(X^TX\theta-X^TY) + \alpha \theta=0 \Rightarrow \theta = (X^TX + \alpha E)^{-1}X^TY
(XTXθ−XTY)+αθ=0⇒θ=(XTX+αE)−1XTY
\qquad
其中
E
E
E为单位矩阵。
\qquad Ridge回归在不抛弃任何一个变量的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但这会使得模型的变量特别多,模型解释性差。有没有折中一点的办法呢?即又可以防止过拟合,同时克服Ridge回归模型变量多的缺点呢?有,这就是下面说的Lasso回归。
3. 初识Lasso回归
\qquad
Lasso回归有时也叫做线性回归的L1正则化,和Ridge回归的主要区别就是在正则化项,Ridge回归用的是L2正则化,而Lasso回归用的是L1正则化。Lasso回归的损失函数表达式如下:
J
(
θ
)
=
1
2
n
(
X
θ
−
Y
)
T
(
X
θ
−
Y
)
+
α
∣
∣
θ
∣
∣
1
J(\theta) = \dfrac{1}{2n}(X\theta-Y)^T(X\theta-Y) + \alpha||\theta||_1
J(θ)=2n1(Xθ−Y)T(Xθ−Y)+α∣∣θ∣∣1
\qquad
其中
n
n
n为样本个数,
α
\alpha
α为常数系数,需要进行调优。
∣
∣
θ
∣
∣
1
||\theta||_1
∣∣θ∣∣1为L1范数。
\qquad Lasso回归使得一些系数变小,甚至还是一些绝对值较小的系数直接变为0,因此特别适用于参数数目缩减与参数的选择,因而用来估计稀疏参数的线性模型。
\qquad 但是Lasso回归有一个很大的问题,导致我们需要把它单独拎出来讲,就是它的损失函数不是连续可导的,由于L1范数用的是绝对值之和,导致损失函数有不可导的点。也就是说,我们的最小二乘法,梯度下降法,牛顿法与拟牛顿法对它统统失效了。那我们怎么才能求有这个L1范数的损失函数极小值呢?
\qquad OK,本章主角,两种全新的求极值解法坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression, LARS)该隆重出场了。
4. 用坐标轴下降法求解Lasso回归
\qquad 坐标轴下降法顾名思义,是沿着坐标轴的方向去下降,这和梯度下降不同。梯度下降是沿着梯度的负方向下降。不过梯度下降和坐标轴下降的共性就都是迭代法,通过启发式的方式一步步迭代求解函数的最小值。
\qquad 坐标轴下降法的数学依据主要是这个结论(此处不做证明):一个可微的凸函数 J ( θ ) J(\theta) J(θ), 其中 θ \theta θ是 n ∗ 1 n*1 n∗1的向量,即有 n n n个维度。如果在某一点 θ ‾ \overline{\theta} θ,使得 J ( θ ) J(\theta) J(θ)在每一个坐标轴 θ ‾ i ( i = 1 , 2 , … , n ) \overline{\theta}_i(i=1,2,\dots,n) θi(i=1,2,…,n)上都是最小值,那么 J ( θ ‾ i ) J(\overline{\theta}_i) J(θi)就是一个全局的最小值。
\qquad 于是我们的优化目标就是在 θ \theta θ的 n n n个坐标轴上(或者说向量的方向上)对损失函数做迭代的下降,当所有的坐标轴上的 θ i ( i = 1 , 2 , … , n ) \theta_i(i=1,2,\dots,n) θi(i=1,2,…,n)都达到收敛时,我们的损失函数最小,此时的 θ \theta θ即为我们要求的结果。
\qquad 下面我们看看具体的算法过程:
\qquad
1. 首先,我们把
θ
\theta
θ向量随机取一个初值。记为
θ
(
0
)
\theta^{(0)}
θ(0) ,上面的括号里面的数字代表我们迭代的轮数,当前初始轮数为0。
\qquad
2. 对于第
k
k
k轮的迭代。我们从
θ
1
(
k
)
\theta_1^{(k)}
θ1(k)开始,到
θ
n
(
k
)
\theta_n^{(k)}
θn(k)为止,依次求
θ
i
(
k
)
\theta_i^{(k)}
θi(k)。而
θ
i
(
k
)
\theta_i^{(k)}
θi(k)的表达式如下:
θ
i
(
k
)
∈
a
r
g
m
i
n
⏟
θ
i
J
(
θ
1
(
k
)
,
θ
2
(
k
)
,
…
,
θ
i
−
1
(
k
)
,
θ
i
,
θ
i
+
1
(
k
−
1
)
,
…
,
θ
n
(
k
−
1
)
)
\theta_i^{(k)} \in \underbrace{arg\ min}_{\theta_i}\ J(\theta_1^{(k)},\theta_2^{(k)},\dots,\theta_{i-1}^{(k)},\theta_{i},\theta_{i+1}^{(k-1)},\dots,\theta_{n}^{(k-1)})
θi(k)∈θi
arg min J(θ1(k),θ2(k),…,θi−1(k),θi,θi+1(k−1),…,θn(k−1))
\qquad
也就是说
θ
i
(
k
)
\theta_i^{(k)}
θi(k)是使
J
(
θ
1
(
k
)
,
θ
2
(
k
)
,
…
,
θ
i
−
1
(
k
)
,
θ
i
,
θ
i
+
1
(
k
−
1
)
,
…
,
θ
n
(
k
−
1
)
)
J(\theta_1^{(k)},\theta_2^{(k)},\dots,\theta_{i-1}^{(k)},\theta_{i},\theta_{i+1}^{(k-1)},\dots,\theta_{n}^{(k-1)})
J(θ1(k),θ2(k),…,θi−1(k),θi,θi+1(k−1),…,θn(k−1))最小化时候的
θ
i
\theta_i
θi值,此时
J
(
θ
)
J(\theta)
J(θ)只有
θ
i
(
k
)
\theta_i^{(k)}
θi(k)是变量,其余均为常量,因此最小值容易通过求导求得。
\qquad
如果上面这个式子不好理解,我们具体一点,在第
k
k
k轮,
θ
\theta
θ
向量的
n
n
n个维度的迭代式如下:
θ
1
(
k
)
∈
a
r
g
m
i
n
⏟
θ
1
J
(
θ
1
,
θ
2
(
k
−
1
)
,
…
,
θ
n
(
k
−
1
)
)
\theta_1^{(k)} \in \underbrace{arg\ min}_{\theta_1}\ J(\theta_1,\theta_2^{(k-1)},\dots,\theta_n^{(k-1)})
θ1(k)∈θ1
arg min J(θ1,θ2(k−1),…,θn(k−1))
θ
2
(
k
)
∈
a
r
g
m
i
n
⏟
θ
2
J
(
θ
1
(
k
)
,
θ
2
,
θ
3
(
k
−
1
)
,
…
,
θ
n
(
k
−
1
)
)
\theta_2^{(k)} \in \underbrace{arg\ min}_{\theta_2}\ J(\theta_1^{(k)},\theta_2,\theta_3^{(k-1)},\dots,\theta_n^{(k-1)})
θ2(k)∈θ2
arg min J(θ1(k),θ2,θ3(k−1),…,θn(k−1))
…
\dots
…
θ
n
(
k
)
∈
a
r
g
m
i
n
⏟
θ
n
J
(
θ
1
(
k
)
,
θ
2
(
k
)
,
θ
3
(
k
)
,
…
,
θ
n
)
\theta_n^{(k)} \in \underbrace{arg\ min}_{\theta_n}\ J(\theta_1^{(k)},\theta_2^{(k)},\theta_3^{(k)},\dots,\theta_n)
θn(k)∈θn
arg min J(θ1(k),θ2(k),θ3(k),…,θn)
\qquad 3. 检查 θ ( k ) \theta^{(k)} θ(k)向量和 θ ( k − 1 ) \theta^{(k-1)} θ(k−1)向量在各个维度上的变化情况,如果在所有维度上变化都足够小,那么 θ ( k ) \theta^{(k)} θ(k)即为最终结果,否则转入2,继续第 k + 1 k+1 k+1轮的迭代。
\qquad 以上就是坐标轴下降法的求极值过程,可以和梯度下降做一个比较:
\qquad a) 坐标轴下降法在每次迭代中在当前点处沿一个坐标方向进行一维搜索 ,固定其他的坐标方向,找到一个函数的局部极小值。而梯度下降总是沿着梯度的负方向求函数的局部最小值。
\qquad b) 坐标轴下降优化方法是一种非梯度优化算法。在整个过程中依次循环使用不同的坐标方向进行迭代,一个周期的一维搜索迭代过程相当于一个梯度下降的迭代。
\qquad c) 梯度下降是利用目标函数的导数来确定搜索方向的,该梯度方向可能不与任何坐标轴平行。而坐标轴下降法是利用当前坐标方向进行搜索,不需要求目标函数的导数,只按照某一坐标方向进行搜索最小值。
\qquad d) 两者都是迭代方法,且每一轮迭代,都需要O( m n mn mn)的计算量( m m m为样本数, n n n为系数向量的维度)
5. 用最小角回归法求解Lasso回归
\qquad 第四节介绍了坐标轴下降法求解Lasso回归的方法,此处再介绍另一种常用方法, 最小角回归法(Least Angle Regression, LARS)。
5.1 前向选择(Forward Selection)算法
\qquad 前向选择算法的原理是是一种典型的贪心算法。要解决的问题是对于:
\qquad 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为特征维度。
\qquad
把矩阵
X
X
X看做
n
n
n个
m
∗
1
m*1
m∗1的向量
X
i
(
i
=
1
,
2
,
…
,
n
)
X_i(i=1,2,\dots,n)
Xi(i=1,2,…,n),在
Y
Y
Y的
X
X
X变量
X
i
(
i
=
1
,
2
,
…
,
n
)
X_i(i=1,2,\dots,n)
Xi(i=1,2,…,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
\qquad
其中
θ
k
=
<
X
k
,
Y
>
∣
∣
X
k
∣
∣
2
2
\theta_k = \dfrac{<X_k,Y>}{||X_k||_2^2}
θk=∣∣Xk∣∣22<Xk,Y>
\qquad
即:
Y
‾
\overline{Y}
Y是
Y
Y
Y在
X
k
X_k
Xk上的投影。那么,可以定义残差(residual):
Y
r
e
s
=
Y
−
Y
‾
Y_{res}=Y - \overline{Y}
Yres=Y−Y。由于是投影,所以很容易知道
Y
r
e
s
Y_{res}
Yres和
X
k
X_k
Xk是正交的。再以
Y
r
e
s
Y_{res}
Yres为新的因变量,去掉
X
k
X_k
Xk后,剩下的自变量的集合
X
i
(
i
=
1
,
2
,
3
,
…
,
k
−
1
,
k
+
1
,
…
,
n
)
X_i(i=1,2,3,\dots,k-1,k+1,\dots,n)
Xi(i=1,2,3,…,k−1,k+1,…,n)为新的自变量集合,重复刚才投影和残差的操作,直到残差为0,或者所有的自变量都用完了,才停止算法。
\qquad
当
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,此时用残差
Y
r
e
s
Y_{res}
Yres接着在
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
θ即为最终结果,此处
θ
\theta
θ计算设计较多矩阵运算,这里不讨论。
\qquad 此算法对每个变量只需要执行一次操作,效率高,速度快。但也容易看出,当自变量不是正交的时候,由于每次都是在做投影,所有算法只能给出一个局部近似解。因此,这个简单的算法太粗糙,还不能直接用于我们的Lasso回归。
5.2 前向梯度(Forward Stagewise)算法
\qquad
前向梯度算法和前向选择算法有类似的地方,也是在
Y
Y
Y的
X
X
X变量
X
i
(
i
=
1
,
2
,
…
,
n
)
X_i(i=1,2,\dots,n)
Xi(i=1,2,…,n)中,选择和目标
Y
Y
Y最为接近(余弦距离最大)的一个变量
X
k
X_k
Xk,用
X
k
X_k
Xk来逼近
Y
Y
Y,但是前向梯度算法不是粗暴的用投影,而是每次在最为接近的自变量
X
t
X_t
Xt的方向移动一小步,然后再看残差
Y
r
e
s
Y_{res}
Yres和哪个
X
i
(
i
=
1
,
2
,
…
,
n
)
X_i(i=1,2,\dots,n)
Xi(i=1,2,…,n)最为接近。此时我们也不会把
X
t
X_t
Xt去除,因为我们只是前进了一小步,有可能下面最接近的自变量还是
X
t
X_t
Xt。如此进行下去,直到残差
Y
r
e
s
Y_{res}
Yres减小到足够小,算法停止。
\qquad
当
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最接近,此时残差
Y
r
e
s
Y_{res}
Yres如上图长虚线。接着沿着
X
2
X_2
X2走一小步,发现残差此时又和
X
1
X_1
X1最接近,那么开始沿着
X
1
X_1
X1走,走完一步后发现残差为0,那么算法停止。此时
Y
Y
Y由刚才所有的所有步相加而模拟,对应的算出的系数
θ
\theta
θ即为最终结果。此处
θ
\theta
θ计算设计较多矩阵运算,这里不讨论。
\qquad 当算法在 ϵ \epsilon ϵ很小的时候,可以很精确的给出最优解,当然,其计算的迭代次数也是大大的增加。和前向选择算法相比,前向梯度算法更加精确,但是更加复杂。
\qquad 有没有折中的办法可以综合前向梯度算法和前向选择算法的优点,做一个折中呢?有!这就是终于要出场的最小角回归法。
5.3 最小角回归(Least Angle Regression, LARS)算法
\qquad 最小角回归法对前向梯度算法和前向选择算法做了折中,保留了前向梯度算法一定程度的精确性,同时简化了前向梯度算法一步步迭代的过程。具体算法是这样的:
\qquad
首先,还是找到与因变量
Y
Y
Y最接近或者相关度最高的自变量
X
k
X_k
Xk,使用类似于前向梯度算法中的残差计算方法,得到新的目标
Y
r
e
s
Y_{res}
Yres,此时不用和前向梯度算法一样小步小步的走。而是直接向前走直到出现一个
X
t
X_t
Xt,使得
X
t
X_t
Xt和
Y
r
e
s
Y_{res}
Yres的相关度和
X
k
X_k
Xk与
Y
r
e
s
Y_{res}
Yres的相关度是一样的,此时残差
Y
r
e
s
Y_{res}
Yres就在
X
t
X_t
Xt和
X
k
X_k
Xk的角平分线方向上,此时我们开始沿着这个残差角平分线走,直到出现第三个特征
X
p
X_p
Xp和
Y
r
e
s
Y_{res}
Yres的相关度足够大的时候,即
X
p
X_p
Xp到当前残差
Y
r
e
s
Y_{res}
Yres的相关度和
θ
t
\theta_t
θt,
θ
k
\theta_k
θk与
Y
r
e
s
Y_{res}
Yres的一样。将其也叫入到
Y
Y
Y的逼近特征集合中,并用
Y
Y
Y的逼近特征集合的共同角分线,作为新的逼近方向。以此循环,直到
Y
r
e
s
Y_{res}
Yres足够的小,或者说所有的变量都已经取完了,算法停止。此时对应的系数
θ
\theta
θ即为最终结果。
\qquad
当
θ
\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
β即为最终结果。此处
θ
\theta
θ计算设计较多矩阵运算,这里不讨论。
\qquad 最小角回归法是一个适用于高维数据的回归算法,
\qquad 其主要的优点有:
\qquad 1)特别适合于特征维度 n n n远高于样本数 m m m的情况。
\qquad 2)算法的最坏计算复杂度和最小二乘法类似,但是其计算速度几乎和前向选择算法一样
\qquad 3)可以产生分段线性结果的完整路径,这在模型的交叉验证中极为有用
\qquad 主要的缺点是:
\qquad 由于LARS的迭代方向是根据目标的残差而定,所以该算法对样本的噪声极为敏感。
6. 总结
\qquad Lasso回归是在ridge回归的基础上发展起来的,如果模型的特征非常多,需要压缩,那么Lasso回归是很好的选择。一般的情况下,普通的线性回归模型就够了。