最近剛看完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...