GBDT演算法(最簡單)

2021-10-24 20:26:08 字數 2701 閱讀 3506

3. gbdt的優點和侷限性有哪些?

4. rf(隨機森林)與gbdt之間的區別與聯絡

5. **實現

gbdt(gradient boosting decision tree),全名叫梯度提公升決策樹,使用的是boosting的思想。

boosting方法訓練基分類器時採用序列的方式,各個基分類器之間有依賴。它的基本思路是將基分類器層層疊加,每一層在訓練的時候,對前一層基分類器分錯的樣本,給予更高的權重。測試時,根據各層分類器的結果的加權得到最終結果。

bagging與boosting的序列訓練方式不同,bagging方法在訓練過程中,各基分類器之間無強依賴,可以進行並行訓練。

gbdt的原理很簡單,就是所有弱分類器的結果相加等於**值,然後下乙個弱分類器去擬合誤差函式對**值的殘差(這個殘差就是**值與真實值之間的誤差)。當然了,它裡面的弱分類器的表現形式就是各棵樹。

舉乙個非常簡單的例子,比如我今年30歲了,但計算機或者模型gbdt並不知道我今年多少歲,那gbdt咋辦呢?

它會在第乙個弱分類器(或第一棵樹中)隨便用乙個年齡比如20歲來擬合,然後發現誤差有10歲;

接下來在第二棵樹中,用6歲去擬合剩下的損失,發現差距還有4歲;

接著在第三棵樹中用3歲擬合剩下的差距,發現差距只有1歲了;

最後在第四課樹中用1歲擬合剩下的殘差,完美。

最終,四棵樹的結論加起來,就是真實年齡30歲(實際工程中,gbdt是計算負梯度,用負梯度近似殘差)。

為何gbdt可以用用負梯度近似殘差呢?

回歸任務下,gbdt 在每一輪的迭代時對每個樣本都會有乙個**值,此時的損失函式為均方差損失函式,

所以,當損失函式選用均方損失函式是時,每一次擬合的值就是(真實值 - 當前模型**的值),即殘差。此時的變數是,即「當前**模型的值」,也就是對它求負梯度。

訓練過程

簡單起見,假定訓練集只有4個人:a,b,c,d,他們的年齡分別是14,16,24,26。其中a、b分別是高一和高三學生;c,d分別是應屆畢業生和工作兩年的員工。如果是用一棵傳統的回歸決策樹來訓練,會得到如下圖所示結果:

現在我們使用gbdt來做這件事,由於資料太少,我們限定葉子節點做多有兩個,即每棵樹都只有乙個分枝,並且限定只學兩棵樹。我們會得到如下圖所示結果:

在第一棵樹分枝和圖1一樣,由於a,b年齡較為相近,c,d年齡較為相近,他們被分為左右兩撥,每撥用平均年齡作為**值。

此時計算殘差(殘差的意思就是:a的實際值 - a的**值 = a的殘差),所以a的殘差就是實際值14 - **值15 = 殘差值-1。

注意,a的**值是指前面所有樹累加的和,這裡前面只有一棵樹所以直接是15,如果還有樹則需要都累加起來作為a的**值。

然後拿它們的殘差-1、1、-1、1代替a b c d的原值,到第二棵樹去學習,第二棵樹只有兩個值1和-1,直接分成兩個節點,即a和c分在左邊,b和d分在右邊,經過計算(比如a,實際值-1 - **值-1 = 殘差0,比如c,實際值-1 - **值-1 = 0),此時所有人的殘差都是0。殘差值都為0,相當於第二棵樹的**值和它們的實際值相等,則只需把第二棵樹的結論累加到第一棵樹上就能得到真實年齡了,即每個人都得到了真實的**值。

換句話說,現在a,b,c,d的**值都和真實年齡一致了。perfect!

a: 14歲高一學生,購物較少,經常問學長問題,**年齡a = 15 – 1 = 14

b: 16歲高三學生,購物較少,經常被學弟問問題,**年齡b = 15 + 1 = 16

c: 24歲應屆畢業生,購物較多,經常問師兄問題,**年齡c = 25 – 1 = 24

d: 26歲工作兩年員工,購物較多,經常被師弟問問題,**年齡d = 25 + 1 = 26

所以,gbdt需要將多棵樹的得分累加得到最終的**得分,且每一次迭代,都在現有樹的基礎上,增加一棵樹去擬合前面樹的**結果與真實值之間的殘差。

**階段的計算速度快,樹與樹之間可並行化計算。

在分布稠密的資料集上,泛化能力和表達能力都很好,這使得gbdt在kaggle的眾多競賽中,經常名列榜首。

採用決策樹作為弱分類器使得gbdt模型具有較好的解釋性和魯棒性,能夠自動發現特徵間的高階關係。

gbdt在高維稀疏的資料集上,表現不如支援向量機或者神經網路。

gbdt在處理文字分類特徵問題上,相對其他模型的優勢不如它在處理數值特徵時明顯。

訓練過程需要序列訓練,只能在決策樹內部採用一些區域性並行的手段提高訓練速度。

相同點:

都是由多棵樹組成,最終的結果都是由多棵樹一起決定。

rf和gbdt在使用cart樹時,可以是分類樹或者回歸樹。

不同點:

組成隨機森林的樹可以並行生成,而gbdt是序列生成

隨機森林的結果是多數表決表決的,而gbdt則是多棵樹累加之和

隨機森林對異常值不敏感,而gbdt對異常值比較敏感

隨機森林是減少模型的方差,而gbdt是減少模型的偏差

隨機森林不需要進行特徵歸一化。而gbdt則需要進行特徵歸一化

紙上得來終覺淺,絕知此事要躬行

github:

以上內容參考自:

github/ml-nlp/machine learning/3.2 gbdt

**補充參考for——小白:

python科學計算——numpy.genfromtxt

pd.dataframe()函式解析(最清晰的解釋)

iloc的用法(最簡單)

scikit-learn 梯度提公升樹(gbdt)調參小結(包含所有引數詳細介紹)

gbdt演算法 經典演算法 GBDT

梯度提公升樹 gradient boosting decison tree,gbdt 是整合學習boosting重要演算法。該方法是針對模型的偏差進行的優化。而隨機森林是基於對模型的方差進行優化。即使在整合演算法中,adaboost是利用前一輪迭代器弱學習器的誤差率來更新訓練集的權重。gbdt演算法...

gbdt演算法 演算法梳理五 GBDT

真正開始動手寫,才發現以前理解的不夠深。弄懂乙個演算法,要想明白哪些問題?集合裡有m個樣本,n個特徵,gbdt每棵回歸樹怎麼構造 選取多少樣本,多少特徵 它的損失函式怎麼擬合,殘差是怎麼回事,梯度在其中的作用。gbdt有很多簡稱,有gbt gradient boosting tree gtb gra...

GBDT 簡單理解

1.model ensemble 可以分為三大類 bagging,boosting,stacking.2.boosting可以說是乙個思想 框架 而adaboost等演算法只是其乙個子類,記得iccv2015有乙個結合cnn和boosting的工作獲得了best award?3.boosting的前...