一、簡介
這個方法主要涉及到2個權重集合:
樣本的權重集合
每個樣本都對應一個權重。 在構建第一個弱模型之前,所有的訓練樣本的權重是一樣的。第一個模型完成后,要加大那些被這個模型錯誤分類(分類問題)、或者說預測真實差值較大(回歸問題)的樣本的權重。依次迭代,最終構建多個弱模型。每個弱模型所對應的訓練數據集樣本是一樣的,只是數據集中的樣本權重是不一樣的。
弱模型的權重集合
得到的每個弱模型都對應一個權重。精度越高(分類問題的錯分率越低,回歸問題的錯誤率越低)的模型,其權重也就越大,在最終集成結果時,其話語權也就越大。
二、步驟
1.分類問題
- 訓練數據集
令Yi = 1 or -1,這種定義便於后面的結果集成。集合Y0表示數據集樣本的真實類別序列。
- 初始的樣本權重集合S1,弱模型的權重集合為D
n為數據集樣本個數,m為要建立的弱模型的個數
- 針對數據集構建弱模型M1,得到這個弱模型的錯分率為
假設弱模型M1的訓練數據集的預測類別序列為P1,預測數據集的預測類別序列為Pre_1。
其中Cerror表示被弱模型M1錯分的樣本個數,CData為全部的樣本個數,也就是n。
- 計算弱模型M1的權重
- 更改樣本的權重
D1為非負數,因此預測正確的樣本的權重會比上一次的降低,預測錯誤的會比上一次的增高。
其中除以sum(S),相當於將樣本權重規范化。
- 迭代
當達到設定的迭代次數時停止,或者錯分率小於某個小的正數時停止迭代。
此時得到m個弱模型,以及預測數據集對應的預測結果序列Pre_1,Pre_2, ……Pre_m,
以及模型的權重集合D。
- 結果集成
針對第i個預測樣本的集成結果為JI_i,
回歸問題和分類問題的最大不同在於,回歸問題錯誤率的計算不同於分類問題的錯分率,下面給出回歸問題的步驟,因為回歸算法有很多的變種,這里以Adaboost R2算法為例說明:
2.回歸問題
- 訓練數據集
- 初始的樣本權重集合S1,弱模型的權重集合為D
n為數據集樣本個數,m為要建立的弱模型的個數
-
針對數據集構建弱模型M1,得到這個弱模型的錯誤率為
假設弱模型M1的訓練數據集的預測類別序列為P1,預測數據集的預測類別序列為Pre_1。
錯誤率的計算公式為:
-
計算弱模型M1的權重
-
更改樣本的權重
-
迭代
當達到設定的迭代次數時停止,或者錯誤率小於某個小的正數時停止迭代。
此時得到m個弱模型,以及預測數據集對應的預測結果序列Pre_1,Pre_2, ……Pre_m,
以及模型的權重集合D。
-
結果集成
針對第i個預測樣本的集成結果為JI_i,
3.正則化
現在將回歸問題和分類問題的最終的集成形式寫為如下更為一般的形式
現在將其正則化:
其中a為學習率,也就是步長。在調參時,和弱模型的最大個數一起調參。
三、疑點
- 增加的樣本權重如何在下一個模型訓練時體現出作用?
答:以決策樹為例,計算最佳分割點基尼系數時,或者MSE時,要乘以樣本權重。總之,對於樣本的計算量,要乘以相應的樣本的權重。如果沒在這個AdaBoost的框架下,則相當於原來的樣本的權重都是一樣的,所以乘或者不乘是一樣的,現在在這個AdaBoost的框架下,因為樣本權重發生了改變,所以需要乘。這樣就把樣本權重的改變體現了出來。
- 這個弱模型可以是什么?
答:經常用的就是單層的決策樹,也稱為決策樹樁(Decision Stump),例如單層的CART。其實這個層數也是參數,需要交叉驗證得到最好的。當然這個弱模型也可以是SVM、邏輯回歸、神經網絡等。
參考文獻:
【1】Machine-Learning-for-Beginner-by-Python3/Boosting/AdaBoost/