xgboost 相比GBDT有什麼區別

2021-08-10 16:22:38 字數 1464 閱讀 7536

最近剛看完xgboost的*****,權當是 整理一下思路。

演算法層面的:

1.xgb加了正則項,普通gbdt沒有。為了防止過擬合

t為葉子節點的數量,w為葉子的權重。

y帽子 為**值,y為目標值。

gamma ,delta 為引數

2.xgboost損失函式是誤差部分是二階泰勒展開,gbdt 是一階泰勒展開。因此損失函式近似的更精準。

3.對每顆子樹增加乙個引數,使得每顆子樹的權重降低,防止過擬合,這個引數叫shrinkage

對特徵進行降取樣,靈感**於隨機森林,除了能降低計算量外,還能防止過擬合。

4.實現了利用分捅/分位數方法,實現了全域性和區域性的近似**點演算法,降低了計算量,並且在eps引數設定合理的情況下,能達到窮舉法幾乎一樣的效能

5.提出並實現了特徵帶權重的分位數的方法(好像是用到rank 場景下的,沒太懂。。。)

6.增加處理缺失值的方案(通過列舉所有缺失值在當前節點是進入左子樹,還是進入右子樹更優來決定乙個處理缺失值預設的方向)。

系統層面:

7.對每個特徵進行分塊(block)並排序,使得在尋找最佳**點的時候能夠並行化計算。這是xgboost比一般gbdt更快的乙個重要原因。

8.通過設定合理的block的大小,充分利用了cpu快取進行讀取加速(cache-aware access)。使得資料讀取的速度更快。因為太小的block的尺寸使得多執行緒中每個執行緒負載太小降低了並行效率。太大的block尺寸會導致cpu的快取獲取miss掉。

9. out-of-core 通過將block壓縮(block compressoin)並儲存到硬碟上,並且通過將block分割槽到多個硬碟上(block sharding)實現了更大的io 讀寫速度,因此,因為加入了硬碟儲存block讀寫的部分不僅僅使得xgboost處理大資料量的能力有所提公升,並且通過提高io的吞吐量使得xgboost相比一般實利用這種技術實現大資料計算的框架更快。

xgboost與GBDT區別 優勢

傳統gbdt以cart作為基分類器,xgboost還支援線性分類器,這個時候xgboost相當於帶l1和l2正則化項的邏輯斯蒂回歸 分類問題 或者線性回歸 回歸問題 傳統gbdt在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboo...

GBDT和XGBOOST的區別

陳天奇的xgboost在kaggle中大放異彩,下面講解gbdt和xgboost的區別 com question 41354392xgboost使用小案例 net hb707934728 article details 70739040分類和回歸樹的學習見李航的統計學習方法cart gbdt和xgb...

GBDT和xgboost的差別

1 模型的scalability,弱分類器除cart外也支援lr和linear 2 策略的scalability,可以支援不同的loss functions,來優化效果,只要 一 二階可導即可 3 演算法的scalability,做了很多細節工作,來優化引數學習和迭代速度,特徵壓縮技術,baggin...