LASSO非常实用,但由于它的惩罚项不可以常规地进行求导,使得很多人以为它无法显式地求出解析解。但其实并不是这样的。
1 单变量情形:软阈值法
1.1 软阈值的分类讨论
将N个样本的真实值记为N维向量y,将N个样本的自变量记为z,假设我们已经将自变量做过标准化,即z′ℓn=0,z′z/N=1,这也意味着在LASSO模型中截距项为0。系数β是要优化的参数,惩罚项参数为λ>0。
LASSO就是要求解
βargmin2N1(y−zβ)′(y−zβ)+λ∣β∣(1)
忽略常数项后,上式等价于
βargmin21β2−Ny′zβ+λ∣β∣
将损失函数写成分段函数形式:
f(β)=⎩⎨⎧f1(β)=21β2−(Ny′z+λ)β,β<0f2(β)=21β2−(Ny′z−λ)β,β≥0
分类讨论:
- 若Ny′z>λ,则f1(β)>0,f2(β)在β^=Ny′z−λ处取到最小值f2(β^)<0,因此解为β^=Ny′z−λ;
- 若∣∣Ny′z∣∣≤λ,则f1(β)≥0,f2(β)≥0,且在β^=0处有f1(β^)=f2(β^)=0,因此解为β^=0;
- 若Ny′z<−λ,则f2(β)>0,f1(β)在β^=Ny′z+λ处取到最小值f1(β^)<0,因此解为β^=Ny′z+λ。
利用软阈值算子(soft-thresholding operator)Sλ(x)=sign(x)(∣x∣−λ)+,可将以上三种解统一为
β^=Sλ(y′z/N)
其实在我们的设定下,OLS估计量为β~=y′z/N,因此,将OLS估计量通过一个软阈值算子的操作,就变成了LASSO估计量。
1.2 次梯度
如果引入次梯度(subgradient)的概念,可以更直接地求解(1)式。设∣β∣的次梯度为s∈sign(β),它的形式是,当β=0时有s=sign(β),当β=0时有s∈[−1,1]。根据凸优化(convex optimization)理论,求解(1)相当于求解
−N1z′(y−zβ)+λs=0
的解(β^,λ^)。化简后得到y′z/N=β+λs∈β+λsign(β),最终同样可以解出β^=Sλ(y′z/N)。比如β=0时,就意味着y′z/N∈[−λ,λ]。
2 多变量情形:循环坐标下降法
我们来看多变量的完整版LASSO问题。将自变量排成N×p的矩阵X,我们要求解的是
β∈Rpargmin2N1∥∥y−Xβ∥22+λ∥∥β∥1
在这里,我们使用循环坐标下降法(cyclic coordinate descent),它的思想是,按一定顺序依次对p个参数进行优化,比如按j=1,…,p的顺序,在第j次优化时,保持其他所有系数不变,变动βj使损失函数最小化。
根据以上思想,我们将第j次的最优化目标写为
βj∈Rpargmin2N1∥∥y−k=j∑x⋅kβk−x⋅jβj∥∥22+λk=j∑∣βk∣+λ∣βj∣
记r(j)=y−∑k=jx⋅kβ^k,这称为partial residual,那么根据第1.1节中的结果,我们可以得出
β^j=Sλ(x⋅j′r(j)/N)
记r=r(j)−x⋅jβ^j,上式相当于更新规则
β^j←Sλ(β^j+x⋅j′r/N)
由于目标函数是凸的,没有局部的极小值,因此,每次更新一个坐标,最终可以收敛到全局最优解。
Pathwise coordinate descent(逐路径坐标下降):可以先取一个使β^=0的最小的λ,然后,略微减小λ的值,并以上一次得到的β^作为“warm start”,用坐标下降法迭代直到收敛,不断重复这个过程,最终就可以得到在λ的一系列变化范围内的解。
那么,怎样才能使β^=0?利用次梯度,我们可以知道,对于β^j=0,必有x⋅j′y/N∈[−λ,λ],即要求λ≥∣x⋅j′y∣/N,若要使整个β^=0,则可取λ=maxj∣x⋅j′y∣/N,这就是使β^=0的最小的λ。
3 其他解法
求解LASSO还有其他的解法,如homotopy method,它可以从0开始,得到序列型的解的路径,路径是分段线性的。
还有LARS(least angle regression)算法,这是homotopy method之一,可以有效得到分段线性路径。
这里不作展开。
4 正交基
在上面的过程中,如果将自变量正交化,可以大大简化计算。如在第2节中,如果自变量之间是正交的,则x⋅j′r(j)/N=x⋅j′y/N,此时β^j就是将y对x⋅j做回归的OLS解,通过软阈值算子后的值。