說說xgboost算法

  xgboost算法最近真是愈來愈火,趁着這個浪頭,咱們在最近一次的精準營銷活動中,也使用了xgboost算法對某產品簽約行爲進行預測和營銷,取得了不錯的效果。說到xgboost,不得不說它的兩大優點,一是準確率高,此次營銷模型的AUC達到了94%;二是訓練速度快,在幾十萬樣本集,幾十個特徵的狀況下,1分鐘就能夠訓練完畢。究竟是什麼緣由使得這門武功又快又準?下面就來簡單分析一下。算法

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

 

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

二、GBDT(Gradient Boosting Decision Tree)性能

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

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

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

三、Xgboost線程

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

(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就不容易擬合好,同理再也不贅述。

相關文章
相關標籤/搜索