參考
西瓜書 & 南瓜書
統計學習方法
Background
整合學習的基本原理是:透過構建並結合多個學習器,可以獲得比單個學習器更好的泛化效能。整合學習的核心思想是透過結合多個學習器的判斷,可以獲得比單個學習器更好的泛化效能。
在 PAC 學習框架中,如果存在一個多項式的學習演算法能夠學習一個概念,並且準確率很高,那麼就稱這樣一個概念是強可學習的;如果準確率比隨機猜測好,那麼就稱這樣一個概念是弱可學習的。Schapire 和 Freund 證明了弱可學習概念和強可學習概念是等價的,即一個概念是弱可學習的充分必要條件是這個概念是強可學習的。
弱學習器可以是同質化的可以被叫做基學習),也可以是非同質化的(可以被叫做個體學習器)。
那麼如何根據弱學習器構建強學習器就是整合學習的任務。整合學習的方法主要有兩類:
- Bagging:並行化的整合學習方法,透過對訓練資料集進行取樣,然後訓練多個弱學習器,最後透過投票的方式進行預測。
- Boosting:序列化的序列化學習方法,透過對訓練資料集進行加權,然後訓練多個弱學習器,最後透過加權投票的方式進行預測。
要獲得好的整合,個體學習器應當 “好而不同”,即個體學習器應當有較高的 準確率,同時應當有較大的 多樣性。
一個簡單的分析:考慮二分類問題\(y \in \{+1, -1 \}\), 所有基分類器的誤差為
假設整合透過 T 個學習器絕對多數投票法確定,即
假設基分類器錯誤率相互獨立,那麼根據 Hoeffding 不等式,整合分類器的錯誤率為
上述第一個等式是由於當 \(k > \lfloor \frac{T}{2} \rfloor\) 時,\(k\) 個分類器錯誤,整合分類器無法正確分類。
由上述不等式可知
- 隨著個體分類器數目的增加,整合分類器的錯誤率會指數級下降
- \(\epsilon = 0.5\)的分類器是無用的,但是\(\epsilon \leq 0.5\)的分類器是有用的,\(\epsilon \geq 0.5\)也是有用的。
Boosting-AdaBoost
對整合模型採用加性模型(additive model)的形式,即
演算法流程
-
初始化訓練資料的權值分佈,對於訓練資料集\(D\),每個樣本的權值為\(D_0(i) = \frac{1}{N}\),其中\(N\)為樣本數目。
-
對於 \(t = 1, 2, \cdots, T\):
- 使用權值分佈\(D_t\)的訓練資料集學習得到基分類器\(h_t(x)\)
- 計算\(h_t(x)\)在訓練資料集上的分類誤差率
\(\epsilon_t = P(h_t(x) \neq y) = \sum_i D_t(i)\mathbb{I}(h_t(x_i) \neq y_i)\) - 計算\(h_t(x)\)的係數\(\alpha_t = \frac{1}{2} \log \frac{1-\epsilon_t}{\epsilon_t}\)
- 更新訓練資料集的權值分佈\[D_{t+1} = \frac{D_t(i) \exp(-\alpha_t y_i h_t(x_i))}{Z_t} \]其中\(Z_t\)是規範化因子,使得\(D_{t+1}\)成為一個機率分佈。
-
構建基分類器的線性組合
\[f(x) = \sum_{t=1}^{T} \alpha_t h_t(x) \] -
得到最終分類器
\[h(x) = sign(f(x)) = sign(\sum_{t=1}^{T} \alpha_t h_t(x)) \]
演算法分析
- 係數\(\alpha_t\)表示了基分類器\(h_t(x)\)的重要性,當\(\epsilon_t\)越小,\(\alpha_t\)越大,即分類誤差率越小的基分類器在最終分類器中的作用越大。
- 權值分佈\(D_t\)表示了不同樣本在不同基分類器中的重要性,分類錯誤的樣本在下一輪中的權值越大,即\[D_{t+1}(i) = \begin{cases} \frac{D_t(i) \exp(-\alpha_t)}{Z_t} & h_t(x_i) = y_i \\ \frac{D_t(i) \exp(\alpha_t)}{Z_t} & h_t(x_i) \neq y_i \end{cases} \]
前向分佈演算法
考慮 additive model 的形式:
其中所有的\(\alpha_t\)與\(\gamma_t\)都需要學習,非常困難,因此考慮前向分步演算法,即每次只學習一個基分類器\(h_t(x)\),並且學習\(\alpha_t\)。
只需要最佳化
得到\(\alpha_t\)和\(h_t(x)\)後,更新\(H_t(x) = H_{t-1}(x) + \alpha_t h_t(x)\)。
前向分佈演算法與 AdaBoost
AdaBoost 是前向分佈演算法的一個特例,AdaBoost 的損失函式為指數損失函式:
Proof Start
Step 1: 化簡損失函式
考慮指數損失函式
那麼定義在 additive model 上的損失函式即為
我們具體考慮\(\exp(-\alpha_t y_i h_t(x_i))\),當\(h_t(x_i) = y_i\)時,\(\exp(-\alpha_t y_i h_t(x_i)) = \exp(-\alpha_t)\),當\(h_t(x_i) \neq y_i\)時,\(\exp(-\alpha_t y_i h_t(x_i)) = \exp(\alpha_t)\),因此
於是
那麼損失函式可以寫成
Step 2:定義新的權值分佈
由於\(D(i) \exp(-y_iH_{t-1}(x_i))\)與\(h_t(x), \alpha_t\)無關,因此我們 denote
那麼損失函式可以寫成
Step 3:求解最優的\(h_t(x)\)和\(\alpha_t\)
我們分別對\(h_t(x)\)和\(\alpha_t\)進行最佳化,對於\(h_t(x)\),我們可以得到
假設\(\exp(\alpha_t) - \exp(-\alpha_t) \geq 0\), 上述最佳化問題等價於
第二個等號由於\(D_t\)與\(\hat{D}_t\)只差一個歸一化因子,因此等價。
即\(h_t(x)\)是在\(\hat{D}_t\)上的最小分類誤差率的基分類器,
對於\(\alpha_t\),我們使用偏導數可以得到
化簡得
那麼最終得到
Proof End
Summary:透過指數損失函式與前向分佈演算法,我們可以得到 AdaBoost 的演算法流程。
Boosting-提升樹與 GDBT
更一般的整合損失函式形式為
我們透過\(H_{t-1}\)的損失函式值來求\(H_t\)的損失函式值,使用 Talyor Series,即
損失函式可以被化簡為
於是,我們可以得到最佳化問題
Boosting 總結
在前向分佈求解的過程中,實際上可以一定程度的看作是一個殘差逼近的過程,即每次學習一個基分類器\(h_t(x)\),使得當前模型\(H_{t-1}(x)\)的殘差最小。
Boosting 使用對樣本重新賦權的方式,使得分類錯誤的樣本在下一輪中的權值更大,從而使得基分類器更加關注分類錯誤的樣本,對不能處理權重的 learner,可以透過對樣本重取樣的方式來實現。
從偏差-方差分解的角度來看,Boosting 透過減小偏差的方式來提高模型的泛化效能。
Bagging
雖然整合學習中的學習器獨立性很難保證,但是可以透過其他手段保持學習器的多樣性,Bagging 就是一種透過對訓練資料集進行取樣的方式來保持學習器的多樣性。
使用 Bootrap Sampling 的方式,即對訓練資料集進行有放回的取樣,得到\(T\)個新的訓練資料集。隨後並行訓練\(T\)個基分類器,最後透過投票/平均的方式進行預測。
Bootstrap Sampling 保證了每個基分類器的訓練資料集是不同的,從而保證了基分類器的多樣性。同時,也能保證有\(\frac{1}{e}\)的樣本沒有被取樣到,這部分樣本可以用作驗證集對泛化誤差進行“包外估計”。
定義\(D_t\)為\(h_t\)的訓練集,\(H^{\text{oob}}(x)\)為對樣本\(x\)的包外預測,僅考慮那些未使用\(x\)的基分類器\(h_t\),那麼
Bagging 的泛化誤差的包外估計可以定義為
Bagging 更加註重減小方差。
Bagging-Random Forest
Random Forest 是 Bagging 的一個擴充套件,透過對特徵進行隨機取樣(列取樣),使得每個基分類器的訓練資料集不僅在樣本(行取樣)上不同,而且在特徵上也不同。