XGBOOST集成樹模型的原理梳理

0 前言

xgboost本身是集成樹模型,在瞭解其原理之前,先對樹模型的機器學習基礎知識做一定介紹。

監督學習元素

(1)學習模型(即已知x,求出y的模型表達式)
比如:線性模型;
邏輯迴歸模型;

(2)參數
從數據當中學習得到模型參數。

(3)目標函數
包含兩部分:損失函數+正則項

損失函數是衡量模型擬合訓練數據的能力。
在訓練數據上的損失函數,有多種形式:比如平方損失、邏輯迴歸損失;

正則項是衡量模型複雜度,有L1正則項,L2正則項;

目標函數包含兩部分的原因就是:保證至少在訓練數據上,該模型能較好地接近訓練數據的分佈,即擬合準確率高;同時,更簡單的模型在測試集上預測會具有更小的方差,可以讓模型更具穩定性。

集成學習方法

像GBM、隨機森林等廣泛被應用的,許多比賽中取得優異成績的通常都是利用樹的集成方法。
可以不用特徵歸一化,可以學習特徵之間高階關聯,

在單個變量上學習一棵樹

在這裏插入圖片描述
可以看到,最好的學習效果就是在損失函數和正則項之間達到一個很好的平衡。即樹本身模型的損失函數和樹的複雜度,通常咱們描述樹的學習(以決策樹爲例),會提到如下幾點,對應在模型中的提現見箭頭後面:
(1)通過信息增益分裂 —> 損失函數
(2)剪枝 —> 通過定義的節點進行正則化項
(3)最大深度 —>在函數空間的約束
(4)使葉子結點的值變光滑 —>對葉子結點的L2正則化。

迴歸樹不僅僅用來做迴歸

迴歸樹集成定義了你可以怎樣定義預測得分,可用來做分類、迴歸、排序…,取決於你怎樣定義你的目標函數,目前我們瞭解到的目標函數:
平方損失函數:會導致梯度提升;
邏輯迴歸損失函數:會導致梯度對數提升

對於集成樹模型,怎樣學習模型?

我們不能用隨機梯度下降的方法,去尋找下一個迭代值;因爲我們的元素是一顆樹,而不是數值向量。

解決辦法就是:讓模型從常數預測函數項開始,每次加入新的函數,新加入的函數就是我們需要決定的,通過加入這個新函數,讓總體(目標函數+正則)達到最小;

1、XGBOOST原理

Xgboost是Boosting算法的其中一種,Boosting算法的思想是將許多弱分類器集成在一起,形成一個強分類器。因爲Xgboost是一種提升樹模型,所以它是將許多樹模型集成在一起,形成一個很強的分類器。而所用到的樹模型則是CART迴歸樹模型。

Xgboost是在GBDT的基礎上進行改進,使之更強大,適用於更大範圍。

Xgboost一般和sklearn一起使用,但是由於sklearn中沒有集成Xgboost,所以才需要單獨下載安裝。

2、XGBOOST的優點

正則化

實際上,Xgboost是以“正則化提升(regularized boosting)” 技術而聞名。Xgboost在代價函數里加入了正則項,用於控制模型的複雜度。正則項裏包含了樹的葉子節點個數,每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是Xgboost優於傳統GBDT的一個特徵

並行處理

Xgboost工具支持並行。衆所周知,Boosting算法是順序處理的,也是說Boosting不是一種串行的結構嗎?怎麼並行的?注意Xgboost的並行不是tree粒度的並行。Xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數裏包含)。Xgboost的並行式在特徵粒度上的,也就是說每一顆樹的構造都依賴於前一顆樹。

我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因爲要確定最佳分割點),Xgboost在訓練之前,預先對數據進行了排序,然後保存爲block結構,後面的迭代中重複使用這個結構,大大減小計算量。這個block結構也使得並行成爲了可能,在進行節點的分類時,需要計算每個特徵的增益,大大減少計算量。這個block結構也使得並行成爲了可能,在進行節點的分裂的時候,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多線程進行。

靈活性

Xgboost支持用戶自定義目標函數和評估函數,只要目標函數二階可導就行。它對模型增加了一個全新的維度,所以我們的處理不會受到任何限制。

缺失值處理

對於特徵的值有缺失的樣本,Xgboost可以自動學習出他的分裂方向。Xgboost內置處理缺失值的規則。用戶需要提供一個和其他樣本不同的值,然後把它作爲一個參數穿進去,以此來作爲缺失值的取值。Xgboost在不同節點遇到缺失值時採用不同的處理方法,並且會學習未來遇到缺失值時的處理方法。

剪枝

Xgboost先從頂到底建立所有可以建立的子樹,再從底到頂反向機芯剪枝,比起GBM,這樣不容易陷入局部最優解

內置交叉驗證

Xgboost允許在每一輪Boosting迭代中使用交叉驗證。因此可以方便的獲得最優Boosting迭代次數,而GBM使用網格搜索,只能檢測有限個值。

參考

https://www.cnblogs.com/wj-1314/p/9402324.html
https://zdkswd.github.io/2019/03/04/XGBoost%20%E4%B8%AA%E4%BA%BA%E6%80%BB%E7%BB%93/(內含陳天琦關於xgboost的高清PPT)

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