1. 程式人生 > >機器學習高頻面試題之---簡述GBDT與XGBoost的區別

機器學習高頻面試題之---簡述GBDT與XGBoost的區別

最近校招面試被問到了這個問題,之前也在蒐集了一些資料,在此整理一下,貼在這裡。

一、基本概念

GBDT(又稱Gradient Boosted Decision Tree/Grdient Boosted Regression Tree),是一種迭代的決策樹演算法,該演算法由多個決策樹組成。它最早見於yahoo,後被廣泛應用在搜尋排序、點選率預估上。
xgboost是陳天奇大牛新開發的Boosting庫。它是一個大規模、分散式的通用Gradient Boosting(GBDT)庫,它在Gradient Boosting框架下實現了GBDT和一些廣義的線性機器學習演算法。

二、區別所在

1、XBG還支援線性分類器。

傳統GBDT以CART作為基分類器,xgboost還支援線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。

2、XGB對損失函式進行二階泰勒展開。

傳統GBDT在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支援自定義代價函式,只要函式可一階和二階求導。

這裡寫圖片描述

3、xgboost在代價函式里加入了正則項,用於控制模型的複雜度。

正則項裡包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。
這裡寫圖片描述

這裡寫圖片描述

4、XGB的權重衰減。

xgboost在進行完一次迭代後,會將葉子節點的權重乘上該係數,主要是為了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,一般把eta設定得小一點,然後迭代次數設定得大一點。(補充:傳統GBDT的實現也有學習速率)

5、XGB支援列抽樣。

xgboost借鑑了隨機森林的做法,支援列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。

6、xgboost工具支援並行。

xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函式裡包含了前面t-1次迭代的預測值)。xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對資料進行了排序,然後儲存為block結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個block結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多執行緒進行。可並行的近似直方圖演算法。樹節點在進行分裂時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法列舉所有可能的分割點。當資料無法一次載入記憶體或者在分散式情況下,貪心演算法效率就會變得很低,所以xgboost還提出了一種可並行的近似直方圖演算法,用於高效地生成候選的分割點。