gbdt和xgboost區(qū)別如下:
1、傳統(tǒng)GBDT以CART作為基分類器,xgboost還支持線性分類器,這個時候xgboost相當于帶L1和L2正則化項的邏輯斯蒂回歸(分類問題)或者線性回歸(回歸問題)。
2、傳統(tǒng)GBDT在優(yōu)化時只用到一階導數(shù)信息,xgboost則對代價函數(shù)進行了二階泰勒展開,同時用到了一階和二階導數(shù)。順便提一下,xgboost工具支持自定義代價函數(shù),只要函數(shù)可一階和二階求導。
3、xgboost在代價函數(shù)里加入了正則項,用于控制模型的復雜度。正則項里包含了樹的葉子節(jié)點個數(shù)、每個葉子節(jié)點上輸出的score的L2模的平方和。從Bias variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優(yōu)于傳統(tǒng)GBDT的一個特性。(關于這個點,接下來詳細解釋)
4、Shrinkage(縮減),相當于學習速率(xgboost中的eta)。xgboost在進行完一次迭代后,會將葉子節(jié)點的權重乘上該系數(shù),主要是為了削弱每棵樹的影響,讓后面有更大的學習空間。實際應用中,一般把eta設置得小一點,然后迭代次數(shù)設置得大一點。(補充:傳統(tǒng)GBDT的實現(xiàn)也有學習速率)
5、列抽樣(column subsampling)即特征抽樣。xgboost借鑒了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異于傳統(tǒng)gbdt的一個特性。
6、對缺失值的處理。對于特征的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。
7、xgboost工具支持并行。boosting不是一種串行的結構嗎?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數(shù)里包含了前面t1次迭代的預測值)。xgboost的并行是在特征粒度上的。
決策樹的學習最耗時的一個步驟就是對特征的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對數(shù)據(jù)進行了排序,然后保存為block結構,后面的迭代中重復地使用這個結構,大大減小計算量。這個block結構也使得并行成為了可能,在進行節(jié)點的分裂時,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂,那么各個特征的增益計算就可以開多線程進行。
可并行的近似直方圖算法。樹節(jié)點在進行分裂時,需要計算每個特征的每個分割點對應的增益,即用貪心法枚舉所有可能的分割點。當數(shù)據(jù)無法一次載入內(nèi)存或者在分布式情況下,貪心算法效率就會變得很低,所以xgboost還提出了一種可并行的近似直方圖算法,用于高效地生成候選的分割點。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com