堆疊集成 是什麼?
Stacking:堆疊集成 的完整解釋
多層集成架構,用多個基礎模型的輸出作為新特徵訓練元模型,捕捉基礎模型的複雜交互。
堆疊(Stacking)由 Wolpert 於 1992 年提出,是集成學習中「分而治之」理念的終極體現:它不只組合多個模型,而是透過學習如何組合來達到最優。
核心架構與工作流程
堆疊的典型流程分為兩個訓練階段:
階段一:基礎模型訓練與特徵生成
將訓練集分為 K 折(通常 K=5)。
對於每個基礎模型 h_i(例如決策樹、SVM、神經網路):
- 在 K-1 折上訓練 h_i;
- 用訓練後的 h_i 在剩餘 1 折上進行預測,得到「元特徵」;
- 重複 K 次,使所有訓練樣本都得到恰好一次的預測(避免資料洩漏);
- 同時,在完整訓練集上訓練 h_i,用於後期測試集預測。
重複上述過程對所有基礎模型,得到一個「元特徵集合」,規模為 N × M(N 個樣本,M 個基礎模型)。
階段二:元模型訓練
- 以階段一生成的元特徵為輸入,原始標籤為輸出,訓練一個元模型 g(通常是簡單模型如邏輯回歸,偶爾用梯度提升)。
- 元模型學習「給定各基礎模型的預測,如何最優地組合它們」。
最終預測流程
- 對於新測試樣本,先用各基礎模型進行預測,得到 M 個預測值;
- 將這 M 個預測值作為特徵輸入元模型,得到最終預測。
防止資料洩漏的關鍵
Stacking 最容易犯的錯誤是資料洩漏:若直接用基礎模型在完整訓練集上的預測來訓練元模型,元模型會看到「基礎模型在訓練集上已見過的資料的預測」,導致元模型過擬合。正確做法是上面描述的 K-Fold 流程:每個訓練樣本的「元特徵」來自一個從未見過它的基礎模型,從而避免洩漏。
Stacking 的多個變體
1. 標準 Stacking(Cross-Validation Stacking)
上面描述的方法,用交叉驗證生成元特徵,最為穩健。
2. Hold-Out Stacking(簡化版)
為加速,有時會直接在訓練集的一個子集上訓練基礎模型,在另一個子集上生成元特徵,再訓練元模型。速度快但準確度略低,適合時間緊張的場景。
3. 多層 Stacking(Meta-Stacking)
不只有兩層,而是堆疊三層、四層甚至更多,每層都用上層的輸出作為輸入。在競賽中常見,但複雜度和過擬合風險也大幅上升。
Stacking 的優缺點
優點:
- 性能頂級:捕捉基礎模型的複雜交互,Kaggle 等競賽的最優方案幾乎必用 Stacking;
- 高度靈活:基礎模型可以是任意類型(決策樹、SVM、神經網路、線性模型等),無需同質;
- 能整合異構知識:不同模型在特徵空間或決策邊界上的「視角」被元模型整合,泛化能力強。
缺點:
- 複雜度很高:需訓練多個基礎模型,再訓練元模型,計算量大;
- 超參數眾多:每個基礎模型都有超參數,元模型也有,調優工作量驚人;
- 易過擬合:若資料量不足或基礎模型多樣性不夠,元模型會過度記憶基礎模型的噪音;
- 解釋性差:黑箱程度更高,難以理解最終預測的原因;
- 計算成本高:推論時需要多個模型的預測,延遲比單模型長。
實務使用場景
Stacking 主要用於以下場景:
- 競賽與追求極致性能:Kaggle、數據科學競賽等,對計算成本和複雜度容忍度高;
- 已有多個獨立的高性能模型:公司內有不同團隊訓練的多套模型,想透過 Stacking 發揮最大效能;
- 數據豐富且時間充裕:訓練多個模型和交叉驗證耗時,需要充足的資料和計算資源;
- 離線預測系統:對推論延遲無硬性要求,可以承受多模型推論的成本。
與 Bagging/Boosting 的比較
| 維度 | Bagging | Boosting | Stacking |
|---|---|---|---|
| 複雜度 | 低 | 中 | 高 |
| 訓練方式 | 並行 | 順序 | 分層 |
| 基礎模型 | 同質 | 同質 | 異質 |
| 組合方式 | 簡單(投票/平均) | 加權投票 | 學習(元模型) |
| 計算成本 | 中 | 中 | 高 |
| 性能上限 | 中等 | 高 | 最高 |
| 過擬合風險 | 低 | 高 | 很高 |
| 實務廣泛度 | 廣泛 | 廣泛 | 利基(競賽) |
現代機器學習的常見做法是:快速迭代用 Bagging(隨機森林),性能優化用 Boosting(XGBoost),競賽衝刺用 Stacking。
Stacking 的黃金法則
- 基礎模型的多樣性至關重要:不要選 10 個差不多的決策樹模型,應該選 RF、SVM、神經網路、邏輯回歸等不同架構的模型。
- 元模型通常選簡單模型:邏輯迴歸、Ridge 回歸是標準選擇,避免複雜元模型導致過擬合。
- K-Fold 流程不可省:防止資料洩漏是 Stacking 的生命線。
- 驗證集要獨立:最終評估時需要一個完全沒被看過的測試集,包括基礎模型的訓練都不能看到它。
- 及時停止:層數越多、基礎模型越多,邊際收益遞減越快,通常兩層 Stacking 已足夠。