機器學習 梯度提公升樹 GBDT 的原理小結

2021-09-09 06:45:57 字數 3085 閱讀 7514

在整合學習之adaboost演算法原理小結中,我們對boosting家族的adaboost演算法做了總結,本文就對boosting家族中另乙個重要的演算法梯度提公升樹(gradient boosting decison tree, 以下簡稱gbdt)做乙個總結。gbdt有很多簡稱,有gbt(gradient boosting tree), gtb(gradient tree boosting ), gbrt(gradient boosting regression tree), mart(multiple additive regression tree),其實都是指的同一種演算法,本文統一簡稱gbdt。gbdt在bat大廠中也有廣泛的應用,假如要選擇3個最重要的機器學習演算法的話,個人認為gbdt應該佔一席之地。

gbdt也是整合學習boosting家族的成員,但是卻和傳統的adaboost有很大的不同。回顧下adaboost,我們是利用前一輪迭代弱學習器的誤差率來更新訓練集的權重,這樣一輪輪的迭代下去。gbdt也是迭代,使用了前向分布演算法,但是弱學習器限定了只能使用cart回歸樹模型,同時迭代思路和adaboost也有所不同。

gbdt的思想可以用乙個通俗的例子解釋,假如有個人30歲,我們首先用20歲去擬合,發現損失有10歲,這時我們用6歲去擬合剩下的損失,發現差距還有4歲,第三輪我們用3歲擬合剩下的差距,差距就只有一歲了。如果我們的迭代輪數還沒有完,可以繼續迭代下面,每一輪迭代,擬合的歲數誤差都會減小。

從上面的例子看這個思想還是蠻簡單的,但是有個問題是這個損失的擬合不好度量,損失函式各種各樣,怎麼找到一種通用的擬合方法呢?

在上一節中,我們介紹了gbdt的基本思路,但是沒有解決損失函式擬合方法的問題。針對這個問題,大牛freidman提出了用損失函式的負梯度來擬合本輪損失的近似值,進而擬合乙個cart回歸樹。第t輪的第i個樣本的損失函式的負梯度表示為

通過損失函式的負梯度來擬合,我們找到了一種通用的擬合損失誤差的辦法,這樣無輪是分類問題還是回歸問題,我們通過其損失函式的負梯度的擬合,就可以用gbdt來解決我們的分類回歸問題。區別僅僅在於損失函式不同導致的負梯度不同而已。

好了,有了上面的思路,下面我們總結下gbdt的回歸演算法。為什麼沒有加上分類演算法一起?那是因為分類演算法的輸出是不連續的類別值,需要一些處理才能使用負梯度,我們在下一節講。

這裡我們再看看gbdt分類演算法,gbdt的分類演算法從思想上和gbdt的回歸演算法沒有區別,但是由於樣本輸出不是連續的值,而是離散的類別,導致我們無法直接從輸出類別去擬合類別輸出的誤差。

為了解決這個問題,主要有兩個方法,乙個是用指數損失函式,此時gbdt退化為adaboost演算法。另一種方法是用類似於邏輯回歸的對數似然損失函式的方法。也就是說,我們用的是類別的**概率值和真實概率值的差來擬合損失。本文僅討論用對數似然損失函式的gbdt分類。而對於對數似然損失函式,我們又有二元分類和多元分類的區別。

對於二元gbdt,如果用類似於邏輯回歸的對數似然損失函式,則損失函式為:

除了負梯度計算和葉子節點的最佳負梯度擬合的線性搜尋,二元gbdt分類和gbdt回歸演算法過程相同。

多元gbdt要比二元gbdt複雜一些,對應的是多元邏輯回歸和二元邏輯回歸的複雜度差別。假設類別數為k,則此時我們的對數似然損失函式為:

除了負梯度計算和葉子節點的最佳負梯度擬合的線性搜尋,多元gbdt分類和二元gbdt分類以及gbdt回歸演算法過程相同。

這裡我們再對常用的gbdt損失函式做乙個總結。

對於分類演算法,其損失函式一般有對數損失函式和指數損失函式兩種:

對於huber損失和分位數損失,主要用於健壯回歸,也就是減少異常點對損失函式的影響。

和adaboost一樣,我們也需要對gbdt進行正則化,防止過擬合。gbdt的正則化主要有三種方式。

第二種正則化的方式是通過子取樣比例(subsample)。取值為(0,1]。注意這裡的子取樣和隨機森林不一樣,隨機森林使用的是放回抽樣,而這裡是不放回抽樣。如果取值為1,則全部樣本都使用,等於沒有使用子取樣。如果取值小於1,則只有一部分樣本會去做gbdt的決策樹擬合。選擇小於1的比例可以減少方差,即防止過擬合,但是會增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間。

使用了子取樣的gbdt有時也稱作隨機梯度提公升樹(stochastic gradient boosting tree, sgbt)。由於使用了子取樣,程式可以通過取樣分發到不同的任務去做boosting的迭代過程,最後形成新樹,從而減少弱學習器難以並行學習的弱點。

第三種是對於弱學習器即cart回歸樹進行正則化剪枝。在決策樹原理篇裡我們已經講過,這裡就不重複了。

gbdt終於講完了,gdbt本身並不複雜,不過要吃透的話需要對整合學習的原理,決策樹原理和各種損失函樹有一定的了解。由於gbdt的卓越效能,只要是研究機器學習都應該掌握這個演算法,包括背後的原理和應用調參方法。目前gbdt的演算法比較好的庫是xgboost。當然scikit-learn也可以。

最後總結下gbdt的優缺點。

gbdt主要的優點有:

1) 可以靈活處理各種型別的資料,包括連續值和離散值。

2) 在相對少的調參時間情況下,**的準確率也可以比較高。這個是相對svm來說的。

3)使用一些健壯的損失函式,對異常值的魯棒性非常強。比如 huber損失函式和quantile損失函式。

gbdt的主要缺點有:

1)由於弱學習器之間存在依賴關係,難以並行訓練資料。不過可以通過自取樣的sgbt來達到部分並行。

**:

梯度提公升樹GBDT

上一節我們講了adaboost,而提公升樹也是提公升方法的一種,它的基分類器為分類樹或者回歸樹。ps 首先我們講一下殘差的概念 殘差是指實際值和估計值之間的差,就是相減。一般提公升樹的模型的損失函式是平方損失和對數損失,所以優化很簡單。但是對一般損失函式而言就有困難,所以又有了梯度提公升演算法,然後...

gbdt梯度提公升樹

這採用boosting的思想,把表現一般的學習器通過一定的方法結合成效果相對比較好的學習器 gbdt是提公升樹的一種,是多棵樹的加權結果。採用的是分類回歸樹 cart 樹的劃分採用基尼係數。採用前向分布演算法 1 gbdt為什麼是用負梯度代替殘差?首先這是邏輯上顛倒的錯誤。實質沒有明白gbdt是怎麼...

梯度提公升樹GBDT

gbdt全稱gradient boosting decision tree,即用gradient boosting策略訓練出來的決策樹模型。模型的結果是一組cart樹 回歸分類樹 的組合 t 1,t k 其中 t j 學習的是之前 j 1 棵樹 結果的殘差。這種思想就像準備考試前的複習,先做一遍習題...