LASSO非常實用,但由於它的懲罰項不可以常規地進行求導,使得很多人以為它無法顯式地求出解析解。但其實並不是這樣的。
1 單變量情形:軟閾值法
1.1 軟閾值的分類討論
將\(N\)個樣本的真實值記為\(N\)維向量\(y\),將\(N\)個樣本的自變量記為\(z\),假設我們已經將自變量做過標准化,即\(z' \ell_n=0\),\(z'z/N=1\),這也意味着在LASSO模型中截距項為\(0\)。系數\(\beta\)是要優化的參數,懲罰項參數為\(\lambda\gt 0\)。
LASSO就是要求解
忽略常數項后,上式等價於
將損失函數寫成分段函數形式:
分類討論:
- 若\(\dfrac{y'z}{N}\gt \lambda\),則\(f_1(\beta) \gt 0\),\(f_2(\beta)\)在\(\hat\beta=\dfrac{y'z}{N}- \lambda\)處取到最小值\(f_2(\hat\beta)\lt 0\),因此解為\(\hat\beta=\dfrac{y'z}{N}- \lambda\);
- 若\(\left|\dfrac{y'z}{N}\right|\leq \lambda\),則\(f_1(\beta) \geq 0\),\(f_2(\beta) \geq 0\),且在\(\hat\beta=0\)處有\(f_1(\hat\beta)=f_2(\hat\beta)=0\),因此解為\(\hat\beta=0\);
- 若\(\dfrac{y'z}{N}\lt -\lambda\),則\(f_2(\beta) \gt 0\),\(f_1(\beta)\)在\(\hat\beta=\dfrac{y'z}{N}+\lambda\)處取到最小值\(f_1(\hat\beta)\lt 0\),因此解為\(\hat\beta=\dfrac{y'z}{N}+\lambda\)。
利用軟閾值算子(soft-thresholding operator)\(S_\lambda(x)=\text{sign}(x)(|x|-\lambda)_+\),可將以上三種解統一為
其實在我們的設定下,OLS估計量為\(\tilde\beta=y'z/N\),因此,將OLS估計量通過一個軟閾值算子的操作,就變成了LASSO估計量。
1.2 次梯度
如果引入次梯度(subgradient)的概念,可以更直接地求解\((1)\)式。設\(|\beta|\)的次梯度為\(s\in \text{sign}(\beta)\),它的形式是,當\(\beta \neq 0\)時有\(s= \text{sign}(\beta)\),當\(\beta = 0\)時有\(s\in [-1,1]\)。根據凸優化(convex optimization)理論,求解\((1)\)相當於求解
的解\((\hat\beta,\hat\lambda)\)。化簡后得到\(y'z/N = \beta+\lambda s\in\beta+\lambda \text{sign}(\beta)\),最終同樣可以解出\(\hat\beta=S_\lambda(y'z/N)\)。比如\(\beta=0\)時,就意味着\(y'z/N \in[-\lambda,\lambda]\)。
2 多變量情形:循環坐標下降法
我們來看多變量的完整版LASSO問題。將自變量排成\(N\times p\)的矩陣\(X\),我們要求解的是
在這里,我們使用循環坐標下降法(cyclic coordinate descent),它的思想是,按一定順序依次對\(p\)個參數進行優化,比如按\(j=1,\ldots,p\)的順序,在第\(j\)次優化時,保持其他所有系數不變,變動\(\beta_j\)使損失函數最小化。
根據以上思想,我們將第\(j\)次的最優化目標寫為
記\(r^{(j)}=y-\sum_{k\neq j}x_{\cdot k}\hat{\beta}_k\),這稱為partial residual,那么根據第1.1節中的結果,我們可以得出
記\(r = r^{(j)}-x_{\cdot j}\hat\beta_j\),上式相當於更新規則
由於目標函數是凸的,沒有局部的極小值,因此,每次更新一個坐標,最終可以收斂到全局最優解。
Pathwise coordinate descent(逐路徑坐標下降):可以先取一個使\(\hat\beta=0\)的最小的\(\lambda\),然后,略微減小\(\lambda\)的值,並以上一次得到的\(\hat\beta\)作為“warm start”,用坐標下降法迭代直到收斂,不斷重復這個過程,最終就可以得到在\(\lambda\)的一系列變化范圍內的解。
那么,怎樣才能使\(\hat\beta=0\)?利用次梯度,我們可以知道,對於\(\hat\beta_j=0\),必有\(x_{\cdot j}'y /N \in [-\lambda,\lambda]\),即要求\(\lambda \geq |x_{\cdot j}'y| /N\),若要使整個\(\hat\beta=0\),則可取\(\lambda =\max_j |x_{\cdot j}'y| /N\),這就是使\(\hat\beta=0\)的最小的\(\lambda\)。
3 其他解法
求解LASSO還有其他的解法,如homotopy method,它可以從\(0\)開始,得到序列型的解的路徑,路徑是分段線性的。
還有LARS(least angle regression)算法,這是homotopy method之一,可以有效得到分段線性路徑。
這里不作展開。
4 正交基
在上面的過程中,如果將自變量正交化,可以大大簡化計算。如在第2節中,如果自變量之間是正交的,則\(x_{\cdot j}' r^{(j)}/N = x_{\cdot j}' y/N\),此時\(\hat\beta_j\)就是將\(y\)對\(x_{\cdot j}\)做回歸的OLS解,通過軟閾值算子后的值。