說說xgboost演算法

可健康了發表於2018-05-14

  xgboost演算法最近真是越來越火,趁著這個浪頭,我們在最近一次的精準營銷活動中,也使用了xgboost演算法對某產品簽約行為進行預測和營銷,取得了不錯的效果。說到xgboost,不得不說它的兩大優勢,一是準確率高,這次營銷模型的AUC達到了94%;二是訓練速度快,在幾十萬樣本集,幾十個特徵的情況下,1分鐘就可以訓練完畢。到底是什麼原因使得這門武功又快又準?下面就來簡單分析一下。

  Xgboost的全稱是Extreme Gradient Boosting,它是由華盛頓大學的陳天奇於2014年所創,由於它的高精度和高效率,在近幾年的演算法比賽中被廣泛應用並取得了很好的成績,大放異彩。xgboost可以看作在決策樹和GBDT的基礎上進化而來的,這個過程簡略表示如下:

 

1、決策樹(Decision Tree)
  決策樹的優點是解釋性強、簡單、速度快,缺點是模型不穩定、對特徵純度依賴高,是最簡單的模型。

2、GBDT(Gradient Boosting Decision Tree)

因為單個決策樹的表達能力、範化能力和精度有限,所以GBDT引入了複合樹和增量學習的概念。與隨機森林相似,GBDT也是由多個CART樹組合形成一個最終分類器。在GBDT生成樹的時候,每棵樹沿著前一棵樹誤差減小的梯度方向進行訓練。舉例來說,一個手機的價格100元,用GBDT進行建模,第一棵樹擬合結果是90元,第二棵樹是8元,第三棵樹是2元,每一棵新生成的樹都使得模型的偏差越來越小,三棵樹級聯起來形成最終的模型。xgboost的g也體現在這個地方。

舉個原論文中的栗子,判斷一個人是否使用電腦?

如圖很好地解釋了複合樹和增量學習的概念,通過這兩點,GBDT的範化能力和精度比決策樹有了大幅提高。

3、Xgboost

Xgboost在GBDT的基礎上又進行了大幅改進,演算法的綜合效能有飛躍式的提高,與GBDT相比,Xgboost的優點主要體現精度、速度、可擴充套件性高、防止過擬合這幾點,下面逐條分析。

(1)精度高

Xgboost的損失函式用到了二階導數資訊,而GBDT只用到一階;

在大多數情況,資料集都無法避免出現null值的情況,從而導致梯度稀疏,在這種情況下,xgboost為損失函式指定了預設的梯度方向,間接提升了模型精度和速度。

(2)速度快

Xgboost在生成樹的最佳分割點時,放棄了貪心演算法,而是採用了一種從若干備選點中選擇出最優分割點的近似演算法,而且可以多執行緒搜尋最佳分割點。Xgboost還以塊為單位優化了特徵在記憶體中的存取,解決了Cache-miss問題,間接提高了訓練效率。根據論文所說,通過這些方法優化之後,xgboost的訓練速度比scikit-learn快40倍。

(3)可擴充套件性高

GBDT的基分類器是CART,而xgboost的基分類器支援CART,Linear,LR;

Xgboost的目標函式支援linear、logistic、softmax等,可以處理迴歸、二分類,多分類問題。另外,Xgboost還可以自定義損失函式。

(4)防止過擬合

xgboost在損失函式里加入了正則項,降低模型的方差,使模型更簡單,防止過擬合,還能自動處理one-hot特徵,但是one-hot會增加記憶體消耗,增加訓練時間,陳天奇建議one-hot類別數量在[0, 100]範圍內使用;

xgboost在每一輪迭代時為每棵樹增加一個權重,以此來縮減個別樹的影響力;

xgboost還支援特徵的下采樣,類似於隨機森林,也可以防止過擬合,並且提高速度,不過這個功能在當前版本沒有實現。

Xgboost的

每門武功都有自己的優缺點,xgboost也不例外,這裡我用隨機森林作為對比,從正反兩個角度來解釋一下這兩種演算法的區別。xgboost適用於高偏差,低方差的訓練。而隨機森林適用於高方差,低偏差的訓練集,二者是決策樹進化的兩個方向。

Xgboost的思想是增量學習,通過樹的級聯不斷修正偏差,方差較大的資料和異常值會對模型造成一定的影響。而隨機森林的思想是bagging,樹與樹之間互相獨立,通過多次有放回的取樣,然後所有樹共同投票,以此降低模型的方差,二者有所區別。從正面來說,對於偏差大的訓練集,隨機森林必須訓練到20層樹的深度才能達到的準確率,xgboost只需幾層樹就能達到,因為隨機森林依賴的樹的深度降低偏差,xgboost通過幾個樹的級聯就把偏差輕鬆修正了。從反面來說,對於方差大的訓練集,隨機森林可以輕鬆擬合,xgboost就不容易擬合好,同理不再贅述。

相關文章