嶺迴歸(L2 正則化迴歸) 是什麼?
Ridge Regression:嶺迴歸(L2 正則化迴歸) 的完整解釋
在線性迴歸損失函數中加入 L2 懲罰項以限制係數大小,防止過擬合的監督學習方法。
嶺迴歸的核心動機來自普通最小平方法(OLS)在特定條件下的不穩定性。當特徵之間存在高度相關性(多元共線性),或特徵數量接近甚至超過樣本數量時,OLS 的解會變得極不穩定,係數估計值的方差極大,模型在訓練集上擬合很好,但在測試集上表現差:這就是過擬合問題。嶺迴歸透過向損失函數中加入懲罰項來限制係數的大小,以略微增加偏誤(bias)換取大幅降低方差(variance),通常能在泛化能力上取得更好的效果。
數學形式
普通線性迴歸最小化: 損失 = Σ(y_i - ŷ_i)²
嶺迴歸最小化: 損失 = Σ(y_i - ŷ_i)² + λ × Σ(β_j)²
其中 λ(lambda)是正則化強度超參數,β_j 是各特徵的迴歸係數。λ = 0 時退化為普通 OLS;λ 越大,係數被懲罰越多,模型越接近全零係數(純截距模型)。嶺迴歸有閉合解:β = (X'X + λI)⁻¹ X'y,其中 λI 確保了矩陣可逆性,這也是多元共線性問題的直接解法。
λ 的選擇
正則化強度 λ 是嶺迴歸中最重要的超參數,通常透過交叉驗證(Cross-Validation)選取。常見做法是在對數尺度上嘗試一系列 λ 值(如 0.001, 0.01, 0.1, 1, 10, 100),以驗證集性能(如均方誤差或 R²)選擇最佳值。sklearn 中的 RidgeCV 類別可自動進行此過程。
與 Lasso 的比較
L1 正則化(Lasso,最小絕對收縮和選擇算子)與嶺迴歸是最常被比較的兩種正則化方法。兩者主要區別在於懲罰項的形式與對係數的影響:Lasso 使用係數的絕對值之和(L1 範數),數學上使部分係數精確收縮為零,因此同時具備特徵選擇功能,產生稀疏模型;嶺迴歸使用係數的平方和(L2 範數),係數趨近零但不完全為零,所有特徵都被保留。當真實情況中所有特徵都有一定相關性時,嶺迴歸通常表現更好;當只有少數特徵真正相關時,Lasso 更適合。Elastic Net 結合兩者,同時加入 L1 和 L2 懲罰。
應用場景
- 多元共線性處理:當特徵間高度相關(如不同時間段的同一指標),嶺迴歸能穩定係數估計。
- 高維度迴歸:特徵數量較多但樣本量有限時(如基因組學資料),嶺迴歸防止過擬合。
- 金融預測:預測股票收益、風險因子分析中,嶺迴歸的穩定性有助於提升預測可靠性。
- 自然語言處理:文字分類的 bag-of-words 特徵空間維度極高,正則化是必要的。
優缺點
優點:有閉合解(計算效率高)、數值穩定(解決多元共線性)、所有特徵都被保留(不進行特徵選擇)、對連續型特徵組效果好。
缺點:不進行特徵選擇(若真正需要稀疏模型,應選 Lasso)、係數解釋難度略高於 OLS(因為係數被壓縮,絕對值不直接代表特徵重要性)、對非線性關係無效。
實作範例
以 Python scikit-learn 為例,使用嶺迴歸只需幾行程式碼:
from sklearn.linear_model import Ridge, RidgeCV
from sklearn.preprocessing import StandardScaler
# 標準化特徵(重要!)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 使用交叉驗證自動選擇最佳 λ
ridge_cv = RidgeCV(alphas=[0.01, 0.1, 1, 10, 100], cv=5)
ridge_cv.fit(X_train_scaled, y_train)
print(f'最佳 alpha(λ): {ridge_cv.alpha_}')
與貝葉斯視角的關係
從貝葉斯統計的角度,嶺迴歸等價於在係數 β 上施加均值為零的高斯先驗(Gaussian Prior),L2 懲罰項即對應此先驗的對數。這個視角有助於理解為何 λ 越大時,係數越趨向先驗(即向零收縮):λ 反映了我們對「係數應該較小」這個先驗信念的強度。