一步一步理解GB GBDT xgboost

2021-08-28 16:04:32 字數 2196 閱讀 5970

**:

gbdt和xgboost在競賽和工業界使用都非常頻繁,能有效的應用到分類、回歸、排序問題,雖然使用起來不難,但是要能完整的理解還是有一點麻煩的。本文嘗試一步一步梳理gb、gbdt、xgboost,它們之間有非常緊密的聯絡,gbdt是以決策樹(cart)為基學習器的gb演算法,xgboost擴充套件和改進了gdbt,xgboost演算法更快,準確率也相對高一些。    

機器學習中的學習演算法的目標是為了優化或者說最小化loss function, gradient boosting的思想是迭代生多個(m個)弱的模型,然後將每個弱模型的**結果相加,後面的模型fm+1(x)基於前面學習模型的fm(x)的效果生成的,關係如下:

gb演算法的思想很簡單,關鍵是怎麼生成h(x)?

如果目標函式是回歸問題的均方誤差,很容易想到最理想的h(x)應該是能夠完全擬合

gb演算法的步驟:

1.初始化模型為常數值:

2.迭代生成m個基學習器

1.計算偽殘差

2.基於

3.計算最優的

4.更新模型

gb演算法中最典型的基學習器是決策樹,尤其是cart,正如名字的含義,gbdt是gb和dt的結合。要注意的是這裡的決策樹是回歸樹,gbdt中的決策樹是個弱模型,深度較小一般不會超過5,葉子節點的數量也不會超過10,對於生成的每棵決策樹乘上比較小的縮減係數(學習率<0.1),有些gbdt的實現加入了隨機抽樣(subsample 0.5<=f <=0.8)提高模型的泛化能力。通過交叉驗證的方法選擇最優的引數。因此gbdt實際的核心問題變成怎麼基於?

cart分類樹在很多書籍和資料中介紹比較多,但是再次強調gdbt中使用的是回歸樹。作為對比,先說分類樹,我們知道cart是二叉樹,cart分類樹在每次分枝時,是窮舉每乙個feature的每乙個閾值,根據gini係數找到使不純性降低最大的的feature以及其閥值,然後按照feature<=閾值,和feature>閾值分成的兩個分枝,每個分支包含符合分支條件的樣本。用同樣方法繼續分枝直到該分支下的所有樣本都屬於統一類別,或達到預設的終止條件,若最終葉子節點中的類別不唯一,則以多數人的類別作為該葉子節點的性別。回歸樹總體流程也是類似,不過在每個節點(不一定是葉子節點)都會得乙個**值,以年齡為例,該**值等於屬於這個節點的所有人年齡的平均值。分枝時窮舉每乙個feature的每個閾值找最好的分割點,但衡量最好的標準不再是gini係數,而是最小化均方差--即(每個人的年齡-**年齡)^2 的總和 / n,或者說是每個人的**誤差平方和 除以 n。這很好理解,被**出錯的人數越多,錯的越離譜,均方差就越大,通過最小化均方差能夠找到最靠譜的分枝依據。分枝直到每個葉子節點上人的年齡都唯一(這太難了)或者達到預設的終止條件(如葉子個數上限),若最終葉子節點上人的年齡不唯一,則以該節點上所有人的平均年齡做為該葉子節點的**年齡。

xgboost是gb演算法的高效實現,xgboost中的基學習器除了可以是cart(gbtree)也可以是線性分類器(gblinear)。下面所有的內容來自原始*****,包括公式。

(1). xgboost在目標函式中顯示的加上了正則化項,基學習為cart時,正則化項與樹的葉子節點的數量t和葉子節點的值有關。

(2). gb中使用loss function對f(x)的一階導數計算出偽殘差用於學習生成fm(x),xgboost不僅使用到了一階導數,還使用二階導數。

第t次的loss:

對上式做二階泰勒展開:g為一階導數,h為二階導數

(3). 上面提到cart回歸樹中尋找最佳分割點的衡量標準是最小化均方差,xgboost尋找分割點的標準是最大化,lamda,gama與正則化項相關

xgboost演算法的步驟和gb基本相同,都是首先初始化為乙個常數,gb是根據一階導數ri,xgboost是根據一階導數gi和二階導數hi,迭代生成基學習器,相加更新學習器。

xgboost與gdbt除了上述三點的不同,xgboost在實現時還做了許多優化

一步一步理解GB GBDT xgboost

gbdt和xgboost在競賽和工業界使用都非常頻繁,能有效的應用到分類 回歸 排序問題,雖然使用起來不難,但是要能完整的理解還是有一點麻煩的。本文嘗試一步一步梳理gb gbdt xgboost,它們之間有非常緊密的聯絡,gbdt是以決策樹 cart 為基學習器的gb演算法,xgboost擴充套件和...

一步一步 Sql Azure

一步一步 sql azure 1.使用 windowsazure 平台賬號登陸 2.新建sqlazure server 3.新建資料庫 4.為sql azure server 新增防火牆規則,只有將本機新增到規則裡才能從本機連線到該sqlazure server 5.連線到sql azure ser...

一步一步學cscope

告之 1,我不喜歡寫部落格 因為感覺太浪費時間 2,部落格能記住自己某階段學過的東西,而這些東西可能會很快的忘卻 所以我以後要學著在部落格上浪費時間 前言 本文件記錄了我今天 2007 11 9 下午學習cscope的一點收穫,特收錄部落格以作分享。在學習cscope過程中查閱了大量的文件,但發現適...