完整定義
Lasso 迴歸(Least Absolute Shrinkage and Selection Operator)是線性迴歸的正則化變體,透過在損失函數中加入係數絕對值之和(L1 範數)作為懲罰項,使模型在訓練過程中自動縮減部分特徵係數至恰好為零,同時完成特徵選取與避免過擬合。
Lasso 迴歸的背景與動機
Lasso 迴歸由 Robert Tibshirani 於 1996 年提出,全名為 Least Absolute Shrinkage and Selection Operator。在傳統線性迴歸中,模型透過最小化殘差平方和(RSS)來估計係數,但當特徵維度高或特徵間存在高度相關時,模型容易過擬合,泛化能力下降。Lasso 透過引入 L1 正則化懲罰項解決這個問題,其目標函數為:
目標 = RSS + λ × Σ|βj|
其中 λ(lambda)為超參數,控制懲罰強度;βj 為各特徵的係數。
運作原理:為什麼 L1 能產生稀疏解
L1 懲罰項的幾何特性是 Lasso 能夠產生稀疏係數的關鍵。與 Ridge 迴歸(L2 懲罰)的圓形可行域不同,L1 懲罰項的可行域形狀為菱形(在高維空間為超正交體),其頂點位於座標軸上。當損失函數的等高線與 L1 可行域相切時,切點極有可能落在菱形的頂角(即某些係數為零的點),這就解釋了 Lasso 為何能使部分特徵係數精確歸零,從而實現稀疏表示與特徵選取。
Lasso 與 Ridge 迴歸(L2)的比較
Lasso(L1)與 Ridge(L2)同為常用的正則化迴歸方法,兩者最大的差異在於:
- 特徵選取:Lasso 能將部分係數壓縮至恰好為零(稀疏解),自動進行特徵選取;Ridge 只能將係數縮小但不能使其為零。
- 適用情境:當真實模型僅有少數特徵相關時,Lasso 更合適;當所有特徵均對目標有貢獻時,Ridge 較佳。
- 高相關特徵:Lasso 在特徵高度相關(多重共線性)時可能隨機選取其中一個特徵並忽略其他;Ridge 則會對相關特徵賦予相近係數。Elastic Net 結合兩者優點,同時加入 L1 和 L2 懲罰,兼顧稀疏性與群組效果。
超參數 λ 的選擇
λ 值的選擇對 Lasso 模型性能至關重要:
- λ = 0:退化為普通線性迴歸
- λ 越大:懲罰越強,更多係數被壓縮至零,模型越簡單
- λ 過大:欠擬合,丟失有用特徵
實務上通常使用交叉驗證(Cross-Validation)來選擇最佳 λ 值,例如 sklearn 中的 LassoCV 自動以 k-fold CV 尋找最優 λ。
應用場景
- 基因組學與生物醫學:基因特徵數量龐大(可能達數萬個),但真正與疾病相關的基因可能僅數十個,Lasso 可有效篩選出關鍵基因。
- 金融信用評估:在眾多財務指標中自動找出最具預測力的變數。
- 高維特徵選取前置步驟:作為特徵選取的初步篩選,再將保留特徵輸入更複雜的模型。
- 文字探勘:在詞袋模型中,詞彙空間可能達數萬維,Lasso 可篩選出真正相關的詞彙。
局限性
- 當特徵數 p 大於樣本數 n 時,Lasso 最多只能選取 n 個特徵。
- 對特徵縮放敏感,使用前 MUST 標準化(StandardScaler)。
- 多重共線性情況下特徵選取結果不穩定,可能在多次訓練中選取不同的相關特徵。
求解方法
由於 L1 範數在零點不可微分,Lasso 無法像普通最小平方法那樣直接求解析解。常用求解方法包括座標下降法(Coordinate Descent)與最小角迴歸(LARS)。scikit-learn 預設使用座標下降法,效率高且適用於大規模資料。
Elastic Net:結合 Lasso 與 Ridge 的折衷
Elastic Net 同時加入 L1 和 L2 懲罰項,目標函數為: 目標 = RSS + λ₁ × Σ|βj| + λ₂ × Σβj²
Elastic Net 的優點在於:在特徵高度相關時能夠群組選取相關特徵(L2 項的作用),同時保留 Lasso 的稀疏性(L1 項的作用)。當特徵數量遠大於樣本數且存在多重共線性時,Elastic Net 通常比單純使用 Lasso 或 Ridge 更穩健。實務建議:若不確定使用 L1 或 L2,可先從 Elastic Net 開始,再根據任務需求調整兩個正則化項的比例。
實際使用注意事項
使用 Lasso 時有幾個常見陷阱需要避免:首先,若特徵間存在多重共線性,Lasso 的特徵選取結果在不同資料子集上可能不穩定,需多次驗證;其次,Lasso 的稀疏性是優勢,但若業務上所有特徵都有理論根據,過度剔除特徵可能引入偏差;第三,當樣本量相對特徵數偏少時,Lasso 的係數估計方差可能較大,解釋時需謹慎。建議在最終模型解釋前,搭配 Bootstrap 重採樣評估係數穩定性。
常見問題
Lasso 使用 L1 懲罰項(係數絕對值之和),能將部分特徵係數壓縮至恰好為零,因此同時具有特徵選取的功能;Ridge 使用 L2 懲罰項(係數平方和),只能縮小係數但無法使其為零,適合所有特徵均有貢獻的情境。Lasso 適合高維稀疏問題,Ridge 適合特徵間存在多重共線性的情境。
Lasso 迴歸對特徵的量綱(scale)非常敏感,因為懲罰項是對係數大小的直接懲罰。若各特徵的數值範圍差異很大,量綱大的特徵係數天然就較小,而量綱小的特徵係數較大,導致懲罰不公平。因此在使用 Lasso 前 MUST 對所有特徵進行標準化(零均值、單位方差),或至少做最大最小值縮放,確保每個特徵在相同的數值範圍內。
λ 是控制正則化強度的超參數,通常透過交叉驗證(Cross-Validation)選擇。實務上可先用對數尺度搜尋 λ 的候選值範圍(如 0.001 到 10),再以 k-fold CV(通常 k=5 或 10)評估每個候選 λ 對應的驗證誤差,選取驗證誤差最低的 λ。scikit-learn 的 LassoCV 封裝了這個流程,可自動化選取最佳 λ,省去手動調參的成本。
用 scikit-learn 的 sklearn.linear_model.Lasso,參數 alpha 就是懲罰強度,也就是很多教科書寫的 λ。它最小化的目標是 (1/2n) × ‖Xw − y‖² + alpha × ‖w‖₁,訓練後看 coef_ 裡哪些係數變成 0,就知道哪些特徵被排除,想自動挑 alpha 可以改用 LassoCV。
可以,這是 Lasso 常見的使用情境,因為它會把多數係數壓成 0。但有已知限制:特徵數大於樣本數時,Lasso 最多只會選出和樣本數一樣多的非零係數,而一群高度相關的特徵往往只留下其中一個。遇到這種情況常改用同時含 L1 與 L2 懲罰的 Elastic Net。
相關術語
來源
參考來源:en.wikipedia.org
其他格式:Markdown 版本