1.從本質上看
gbdt是機器學習算法的一種,xgboost是該算法的具體工程實現
2.基分類器
gbdt採用cart作爲基分類器,而xgboost的基分類器可以是線性的
3.防止過擬合
xgboost在目標函數中顯式的加入了正則化項來控制模型的複雜度
4.數據的使用
gbdt每輪迭代都使用全部數據,xgboost則可以對數據進行採用
5.對缺失值處理
XGBOOST可以自動學習出缺失值的分裂方向
6.列抽樣
XGBOOST可以支持類似於隨機森林的列抽樣
7.模型訓練
GBDT在訓練模型時中使用了代價函數的一階導數信息,而XGBOOST將代價函數進行了二次展開,使用了二階導數的信息。
8.並行方式
兩個模型從迭代上都不是並行的,因爲同屬於boosting,只能是串行的,但是從特徵的粒度來看,xgboost可以實現並行。
決策樹在確定最佳分割點時,需要對特徵的值進行排序。XGBoost在訓練之前,預先對數據進行了排序,然後保存爲block(塊)結構,後面的迭代中重複地使⽤這個結構,⼤大減小計算量。這個block結構也使得並行成爲了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多線程進行。
以上都是本人通過各種方式學習後總結了兩者的一些不同。