XGBoost若干個問題

XGBoost原理

關於xgboost原因有很多文章做過詳盡的解釋,這裏列出基本思路和推薦一些文章。

  1. xgboost推導過程
  2. 一文讀懂機器學習大殺器XGBoost原理
  3. xgboost原理總結和代碼展示

XGBoost重要的點

xgboost(eXtreme Gradient Bosting)極端梯度提升是基於GDBT改進而來的,其優化的點有
1.對於GBDT的目標函數利用泰勒展開得到一階和二階梯度信息來近似目標函數
在這裏插入圖片描述
去除常數項和將一階、二階替換得
在這裏插入圖片描述
其中TT爲第t棵樹中總葉子節點個數,ww爲葉子節點分數,γ控制葉子節點的個數,λ可以控制葉子節點分數不會太大,防止過擬合。
最終得到目標函數爲
在這裏插入圖片描述
這個目標函數值越小越好,代表這個數的結構更好。

2.尋找最佳分割點
GDBT分裂點方法,由於GDBT使用的是CART中迴歸樹,通過最小均方誤差來找到最佳分割點。具體情況見一步一步理解GB、GBDT、xgboost

xgboost分裂點方法-近似算法
大概思路是根據百分位法劃分多個分割候選者,然後從候選者找出最佳分割點。其單個分裂流程:通過遍歷所有特徵的所有特徵劃分點,使用目標函數值作爲評價函數。具體做法分裂後目標函數值 / 葉子節點的目標函數的增益,當增益大於某個閾值纔開始分裂。

在這裏插入圖片描述
中括號第一項是左子樹分數,第二項是右子樹分數,第三項是不分割時候的分數,γ是加入新葉子節點引入複雜度代價。

3.防止過擬合方法
GDBT和XGBOOST都可以通過設置樹的深度、設置樣本權重和閾值來達到防止過擬合。
除此之外,還有Shrinkage , Column Subsampling。
Shrinkage思路是每次迭代中對樹的每個葉子節點的分數乘以一個縮減權重η,這有個好處是這顆樹的分數不會太高,產生的殘差優化空間更大,方便後續模型迭代不容易過擬合。
Column Subsampling思路是按層隨機採樣,在樹的同一層每個節點分裂之前先隨機選擇一部分特徵,隨後只需遍歷這部分特徵來確定最優分割點。

4.連續型特徵劃分
面對連續型樣本,如果樣本數據量大、取值太多,遍歷所有取值會花費很多時間,且容易過擬合。xgboost處理思路是對連續型數據進行分桶,方法是找到一個劃分點,將相鄰分位點之間的樣本分在一個桶中,在遍歷該特徵的時候,只需要遍歷各個分位點,從而計算最優劃分。

5.缺失值處理
當樣本存在缺失值數據無法進行特徵劃分,xgboost思路是將存在缺失值樣本分別放在左系節點和右節點,然後計算兩邊的增益,那邊大最後將缺失值的數據放哪邊。

6.處理數據並行化
主要體現在計算增益的時候,在選擇最佳分裂點,候選分裂點增益計算是多線程進行的

XGBoost決策樹生長策略

XGBoost採取帶深度限制level-wise生長策略,level-wise過一次數據可以同時分裂同一層的葉子,可以做多線程,不容易過擬合。但是對同一層的葉子不考慮增益大小統一處理,容易造成多餘的開銷。

特徵重要性計算

xgboost提供三種計算方法

  • weight
  • gain
  • cover
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章