自適應提升 是什麼?

AdaBoost:自適應提升 的完整解釋

透過動態調整樣本權重,使後續模型專注於前面模型的分類錯誤的經典 Boosting 演算法。

AdaBoost(Adaptive Boosting)的歷史地位獨特:它既是弱學習理論與實務的第一次成功結合,也是現代 Boosting 家族的理論先驅。Freund 與 Schapire 因 AdaBoost 的理論貢獻獲得了 2003 年的哥德爾獎。

弱學習假設

AdaBoost 的理論源自一個深刻的問題:Kearns 和 Valiant 在 1989 年提出的「弱學習假設」:若存在多個分類精度略優於隨機猜測的弱學習器(例如準確率 51%),能否組合成任意高精度的強學習器?答案是肯定的,AdaBoost 就是這個理論承諾的具體實現。

工作原理

AdaBoost 的流程相對簡潔:

  1. 初始化:給每個訓練樣本 i 賦予相等的權重 w_i = 1/N。

  2. 迭代(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。

  3. 最終預測:採用加權多數投票 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 有完整實現,但調優經驗相對較少。

常見問題