XGBoost的優點


1. Gradient boosting(GB)

Gradient boosting的思想是迭代生多個(M個)弱的模型,然后將每個弱模型的預測結果相加,后面的模型Fm+1(x)基於前面學習模型的Fm(x)的效果生成的,關系如下:

1 \le m \le M     F_{m+1}(x) = F_m(x) + h(x)

實際中往往是基於loss Function 在函數空間的的負梯度學習,對於回歸問題\frac{1}{2}(y - F(x))^2殘差和負梯度也是相同的。L(y, f)中的f,不要理解為傳統意義上的函數,而是一個函數向量\! f(x_1), \ldots, f(x_n),向量中元素的個數與訓練樣本的個數相同,因此基於Loss Function函數空間的負梯度的學習也稱為“偽殘差”。

2. Gradient boosting Decision Tree(GBDT)

GBDT是GB和DT的結合。要注意的是這里的決策樹是回歸樹

GBDT實際的核心問題變成怎么基於\{(x_i, r_{im})\}_{i=1}^n使用CART回歸樹生成\! h_m(x)

3. Xgboost

xgboost中的基學習器除了可以是CART(gbtree)也可以是線性分類器(gblinear)

(1). xgboost在目標函數中顯示的加上了正則化項,基學習為CART時,正則化項與樹的葉子節點的數量T和葉子節點的值有關。

正則項里包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。

從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。

(2). GB中使用Loss Function對f(x)的一階導數計算出偽殘差用於學習生成fm(x),xgboost不僅使用到了一階導數,還使用二階導數。

    第t次的loss:

    對上式做二階泰勒展開:g為一階導數,h為二階導數

  (3). 上面提到CART回歸樹中尋找最佳分割點的衡量標准是最小化均方差,XGBoost的並行是在特征粒度上的,XGBoost預先對特征的值進行排序,然后保存為block結構

 

xgboost尋找分割點的標准是最大化,lamda,gama與正則化項相關

   xgboost算法的步驟和GB基本相同,都是首先初始化為一個常數,gb是根據一階導數ri,xgboost是根據一階導數gi和二階導數hi,迭代生成基學習器,相加更新學習器。

 

4)xgboost考慮了訓練數據為稀疏值的情況,可以為缺失值或者指定的值指定分支的默認方向,這能大大提升算法的效率

 5)列抽樣。xgboost借鑒了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。

 

凡是這種循環迭代的方式必定有停止條件,什么時候停止呢:

(1)當引入的分裂帶來的增益小於一個閥值的時候,我們可以剪掉這個分裂,所以並不是每一次分裂loss function整體都會增加的,有點預剪枝的意思(其實我這里有點疑問的,一般后剪枝效果比預剪枝要好點吧,只不過復雜麻煩些,這里大神請指教,為啥這里使用的是預剪枝的思想,當然Xgboost支持后剪枝),閾值參數為γγ 正則項里葉子節點數T的系數(大神請確認下);

(2)當樹達到最大深度時則停止建立決策樹,設置一個超參數max_depth,這個好理解吧,樹太深很容易出現的情況學習局部樣本,過擬合;

(3)當樣本權重和小於設定閾值時則停止建樹,這個解釋一下,涉及到一個超參數-最小的樣本權重和min_child_weight,和GBM的 min_child_leaf 參數類似,但不完全一樣,大意就是一個葉子節點樣本太少了,也終止同樣是過擬合;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM