樹算法系列之二:boosting,bagging,提升樹

0.集成學習(ensemble learning)

集成學習是目前一種比較流行的學習算法,是一大類學習算法的統稱,而不是單獨的某個算法。其核心思想是三個臭皮匠,頂個諸葛亮。某一個學習器的能力可能比較弱,但是將多個學習器集合在一起,發揮集體的智慧,可能就能迸發出強大的戰鬥力。

集成學習主要有兩個問題需要解決:第一是如何得到若干個弱學習器,第二則是採取一種什麼樣的策略讓這些弱學習器組合到一起。
對於第一個問題,我們目前採取的方式一般都是將同一種弱學習器訓練多個,比如常見的GBDT,採用的弱學習器就是決策樹這種結構。而第二個問題,目前一般由兩種方式,boosting與bagging。下面先介紹一下boosting與bagging的區別。

1.Boost VS bagging

boost一般的算法流程是:
1.通過加法模型加弱分類器進行線性組合。
2.每輪訓練過程,給錯誤率較小的弱分類器加大權重,而對錯誤率較大的模型降低權重。
3.每輪改變訓練數據的權重或概率分佈,通過提高那些在前一輪被弱分類器分錯樣例的權值,減小前一輪分對樣例的權值,來使得分類器對誤分的數據有較好的效果。

bagging一般的算法流程是:
1.從原始數據中抽樣獲取訓練集,抽樣是有放回的,有些樣本可以被多次抽取到,有些樣本可能一次都沒有被抽中。共進行k輪抽取,得到k個訓練集。
2.每次使用一個訓練集得到一個弱學習器,一共得到k個弱學習器。
3.如果是分類問題,將k個弱學習器投票。如果是迴歸問題,可以將k個學習器的結果取均值作爲最終結果。

從上面boost與bagging的流程不難看出,boosting更多關注的未正確分類的樣本,追求的是準確性,所以bias(偏差)比較小。而bagging追求的是公平,給每個樣本同等的概率,所以virance(方差)比較小。

boosting與bagging的區別在於
1.選擇樣本
bagging是獨立的有放回抽樣,抽樣過程中選取k個訓練集是獨立的。
而boost每輪訓練的訓練集不變,只是每個樣本的權重發生變化。而權重是根據上輪分類結果來進行調整。
2.樣本權重
bagging是均勻的有放回抽樣,每個樣本權重相等。
boosting是根據分類結果取權重,錯誤率越高樣本權重越大。
3.弱分類器權重
bagging中所有弱分類器權重相等。
boosting中準確率越高的分類器權重越大。
4.並行
bagging的弱分類器是可以並行訓練的
boosting因爲分類器有依賴關係,下一輪訓練依賴上一輪的結果,因此不可並行。

2.Boosting Decision Tree(提升樹)

從名字就很容易看出來,提升樹屬於boosting系列算法,其弱分類器是決策樹(Decision Tree)。

提升樹可以用加法模型來表示
fM(x)=m=1MT(x;θm)f_M(x) = \sum_{m=1}^M T(x; \theta_m)
其中,T(x;θm)T(x; \theta_m)表示一棵決策樹,θm\theta_m爲樹的參數,MM爲樹的棵數。

具體的算法流程爲:
假設X與Y分別爲輸入輸出,Y是連續變量。D={(x1,y1),(x2,y2),...,(xn,yn))}D = \{ (x_1, y_1), (x_2, y_2), ..., (x_n, y_n)) \}
一、初始化f0(x)=0f_0(x) = 0
二、對m=1, 2, …M
2.1 計算殘差 rmi=yifm1(xi),i=1,2,..nr_{mi} = y_i - f_{m-1}(x_i), i=1, 2,..n
2.2 擬合殘差,得到新的迴歸樹 T(x;θm)T(x; \theta_m)
2.3 更新fm(x)=fm1(x)+T(x;θm)f_m(x) = f_{m-1}(x) + T(x; \theta_m)
三、得到最終模型
fM(x)=m=1MT(x;θm)f_M(x) = \sum_{m=1}^M T(x; \theta_m)

具體T(x;θm)T(x; \theta_m)怎麼訓練得到,可以參考CART迴歸樹一文。

3.例子

具體提升樹的例子,可以參考https://zhuanlan.zhihu.com/p/35796662一文中提到的統計學習方法一書中的例子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章