自適應提升 是什麼?
AdaBoost:自適應提升 的完整解釋
透過動態調整樣本權重,使後續模型專注於前面模型的分類錯誤的經典 Boosting 演算法。
AdaBoost(Adaptive Boosting)的歷史地位獨特:它既是弱學習理論與實務的第一次成功結合,也是現代 Boosting 家族的理論先驅。Freund 與 Schapire 因 AdaBoost 的理論貢獻獲得了 2003 年的哥德爾獎。
弱學習假設
AdaBoost 的理論源自一個深刻的問題:Kearns 和 Valiant 在 1989 年提出的「弱學習假設」:若存在多個分類精度略優於隨機猜測的弱學習器(例如準確率 51%),能否組合成任意高精度的強學習器?答案是肯定的,AdaBoost 就是這個理論承諾的具體實現。
工作原理
AdaBoost 的流程相對簡潔:
初始化:給每個訓練樣本 i 賦予相等的權重 w_i = 1/N。
迭代(t = 1 to T): a. 用當前樣本權重分布訓練基礎分類器 h_t,目標是儘量降低加權錯誤率 ε_t = Σ_{i: h_t(x_i) ≠ y_i} w_i。 b. 計算分類器的「重要度」:α_t = 0.5 × ln((1 - ε_t) / ε_t)。若 ε_t = 0(完美分類),α_t = ∞;若 ε_t = 0.5(與隨機等價),α_t = 0。 c. 更新樣本權重: w_i ← w_i × exp(-α_t × y_i × h_t(x_i)) (y_i 和 h_t(x_i) 同號時指數為負,權重降低;異號時為正,權重升高) d. 歸一化權重,使其和為 1。
最終預測:採用加權多數投票 sign(Σ_t α_t × h_t(x))。
這個過程的妙處在於:每輪的權重動態調整形成了一個「關注難例」的自適應機制。被第 t 輪誤分類的樣本在第 t+1 輪會獲得更高的權重,強制下一個分類器去努力學習它。
理論保證
Freund 與 Schapire 証明了一個重要定理:若每個弱學習器的準確率都大於 50%(即 ε_t < 0.5),經過足夠輪次的 AdaBoost,訓練誤差可以指數級遞減。具體地,訓練誤差上界為:
誤差 ≤ exp(-2 × Σ_t (0.5 - ε_t)²)
這説明只要基礎分類器比隨機略優(0.5 - ε_t > 0),即使優勢很小,足夠輪次的 AdaBoost 也能將訓練誤差逼近 0。
AdaBoost.M1 vs. AdaBoost.M2
AdaBoost.M1 適用於二分類,對於多分類任務 Schapire 提出了 AdaBoost.M2,核心改進是使用「偽損失」而非簡單的 0/1 誤差,使算法能處理多分類的「部分錯誤」。但在實務中,多分類通常透過 One-vs-Rest 或 One-vs-One 的二分類轉化執行,所以 AdaBoost.M2 的使用相對較少。
AdaBoost vs. Gradient Boosting
| 維度 | AdaBoost | Gradient Boosting |
|---|---|---|
| 損失函數 | 指數損失(固定) | 任意可微 |
| 基礎模型 | 任意分類器 | 通常為決策樹 |
| 權重調整 | 顯式更新 | 隱式(梯度決定) |
| 理論基礎 | 弱學習組合定理 | 梯度下降優化 |
| 實務應用 | 較少(被 GB 取代) | 廣泛(XGBoost 等) |
| 對異常值敏感 | 非常敏感 | 中等敏感 |
梯度提升的出現使 AdaBoost 逐漸淡出現代應用,但它在教學、理論研究和某些特定領域(如人臉偵測)仍有價值。
實務建議
現代應用中,若考慮使用 Boosting,直接用梯度提升(XGBoost、LightGBM)是標準選擇,無需回到 AdaBoost。AdaBoost 主要保留其教學和歷史價值:它清晰地展示了 Boosting 的核心思想,是理解後續演算法的良好入門。若確實需要用 AdaBoost(如某些工業遺留系統或特定應用),scikit-learn 有完整實現,但調優經驗相對較少。