天天看點

boosting算法_boosting

boosting算法_boosting

網上有很多講解機器學習中關于boosting算法的一些文章,講解的都很清晰,我就不搬磚 了。那本文主要是總結boosting算法的一些思想以及這些算法的一些差別,有哪些地方沒有講到,歡迎在評論區添加。

我們知道常用的boosting算法有Adaboost(adaptive boost),GDBT(Gradient Boost Decision Tree)和xgboost(eXtreme Gradient Boosting),他們都屬于內建學習中的boosting分支,內建學習中的另外一個分支是bagging。boosting和bagging的差別呢,就是boosting 每一個基模型的輸入是上一個基模型的輸出,就是說其基模型是有序的,而bagging無序;還有一點就是boosting訓練的的每一個基模型會更加關注方差(因為其本身優化的目标就是增加模型的拟合能力,是以會使用深度不是很深的決策樹,比如Ababoost使用樹樁),而bagging 更加注重偏差(因為其使用多個決策樹本身就是為了減小方差,是以會使用深度較深的決策樹)。

下面将主要說一下這三個算法的特點:

Adaboost

适用于分類,其每次訓練一個基模型的時候會用上一個基模型對訓練資料做預測,并根據預測的結果對樣本的權重進行更新,主要是增加錯誤樣本的權重。這種動态調整樣本權重的方式,使得下一個基模型能夠更加關注錯誤樣本。

GDBT

适用于回歸和分類。其會根據上一個基模型的計算真實值與預測值之間的內插補點(殘差),并把這個作為下一個基模型的輸入,希望下一個基模型能夠更加減小殘差,這樣子模型的拟合能力就會提高。

xgboost

适用于回歸和分類。其主要是定義了優化目标函數,并通過添加正則項來限制模型的複雜度;并巧妙地使用了泰勒公式把目标函數進行了二階展開,其中關于損失函數對每一個樣本的一階和二階導數隻跟上一個基模型的預測值有關,這樣子優化的目标函數就隻跟目前基模型有關。如果說基模型(決策樹)的結構是已知的,那麼就可以通過求導來計算每一個樣本的的預測值,問題是基模型的結構不知道,那麼可以根據目标函數采用貪心的思想來建構一棵樹,再根據建構的樹求出每一個樣本的預測值,最後将這些基模型相加。

本人也隻寫過Adaboost,下面兩個沒有寫過,有什麼不對的地方歡迎指定。

參考連結

謀殺電視機:機器學習-一文了解GBDT的原理-20171001

杜博亞:Adaboost、GBDT與XGBoost的差別

GBDT:梯度提升決策樹