機器學習 集成算法XGBoost原理及推導

XGBoost介紹

在上一篇構造決策樹的博客中說到,XGBoost是一種通過集成的思想提高模型準確率的算法,這種算法是基於決策樹模型的。不懂的可以看下面地址,包含了決策樹的介紹和構造。
https://blog.csdn.net/weixin_43172660/article/details/82995442

下面通過一個具體的例子來說明XGBoost幹了一件什麼樣的事情。
如果要判斷是否打電子遊戲,我們可以通過很多特徵來判定,左邊這顆樹,通過年齡和性別來判定,最後每個葉子節點都有一個得分值(權重值),正數代表對結果有好的影響 ,負數代表對結果有負面影響 ,得分值越高越好,右邊的樹,通過不同的特徵,最後也得到了不同的得分值(權重值)。

XGBoost說的就是,對於男孩來說,通過這兩棵樹,他是否打電子遊戲的得分值就爲2 + 0.9 =2.9,對於老人來說,他的得分值爲-1 + 0.9 =-0.1 ,這就是集成的思想。
在這裏插入圖片描述

XGBoost推導

將上面集成學習方法推廣到一般情況,可知其預測模型爲:
在這裏插入圖片描述
其中爲K樹的總個數,fk表示第顆樹,yi表示樣本xi的預測結果。

我們定義一個損失函數:
在這裏插入圖片描述
那麼現在,我們就可以得到目標函數:預測值和真實值的平方項的差異(n代表一共有n個樣本)。
A==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

我們上面通過舉一個例子,知道了XGBoost是怎樣的一個工作原理,就是不斷加入新的決策樹,使模型越好越好,下個這個圖就說明了 這個過程。(小括號的值代表一共有幾棵樹)
在這裏插入圖片描述
那是不是隨便加入一棵樹都可以呢,不是這樣的,XGBoost是一種提升算法,意思是當你加入一顆新的樹之後,整體表達效果要提升,那麼怎樣才能表示整體表達效果提高呢,我們上面得到了目標函數,所以我們要做這樣一件事(XGBoost的核心):加入一棵樹,使我們的目標函數下降

我們先來說另外一個事情,當我們決定要用決策樹做集成算法的時候,我們要加入懲罰項。

懲罰項

如下圖,這個懲罰項加號左邊表示當決策樹的葉子過多的時候,懲罰力度越大,因爲葉子節點過多,容易造成過擬合,加號右邊是w的L2模平方,兩個組合起來就說我們的懲罰項了。

在這裏插入圖片描述
現在,我們目標函數變成了下面這個樣子,第一行的式子表示,一共加入了t顆樹,一共有t個懲罰項,下面的式子則是將括號裏面變成我們上面求的通式,constant是常數項,所以現在的目標就是,找出一個f(t)使得目標函數最小
在這裏插入圖片描述

泰勒公式

我們要求解上面的目標函數,需要引入一個東西————泰勒展開公式
mV0L3dlaXhpbl80MzE3MjY2MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
我們可以把目標函數l函數中的式子看成這樣:
/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

爲了方便計算,我們需要定義兩個東西(gi爲f(x)的一階導,hi爲f(x)的二階導):
/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
然後根據泰勒展開公式,轉化爲:
==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 因爲對於第t顆樹來說,下面式子爲常數項,所以可以把他加入到後面的constant
G9nLmNzZG4ubmV0L3dlaXhpbl80MzE3MjY2MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
因爲後面要進行求導,所以我們把常樹項去掉,所以目標函數變成了:
在這裏插入圖片描述
我們需要進一步對目標函數進行化簡,我們要明白一個東西,對於第t顆加入的樹來說,w爲葉子節點的得分值,q(x)表示樣本x對應的葉子節點,T爲該樹的葉子節點個數。
MzE3MjY2MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
所以,對於我們的目標函數可以進一步簡化,我們之前是在樣本上遍歷,因爲所有樣本都是會落到葉子節點上,所以我們可以轉化思路,換成在葉子節點上遍歷。
在這裏插入圖片描述
在葉子節點上遍歷的時候,T表示第t棵樹的葉子節點的個數,i表示在第j個節點中的第i個樣本,wj表示第j個葉子節點的得分值

接下來,爲了簡潔一點,我們繼續定義兩個東西,Gj和Hj:
在這裏插入圖片描述
現在,目標函數變成了:
在這裏插入圖片描述
前面說過,我們要求的是目標函數的最小值,所以,現在我們需要在目標函數對w求導,讓其等於0,
4ubmV0L3dlaXhpbl80MzE3MjY2MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
可以求得得分值w:
可能有人說這個G和H怎麼求,因爲g和h是導數,我們只要定義了損失函數,就能求得G和H的值
在這裏插入圖片描述
再把w代回原函數,可以得到:
MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

XGBoost怎麼切割決策樹

結構分數

推過XGBoost的求導,我們可以計算出Obj,代表了當我們指定一個樹的結構的時候,我們在目標上面最多減少多少,我們可以把它叫做結構分數,我們可以認爲這個類似於Gini係數一樣,可以對樹結構進行打分的函數。

下面具一個具體打分的例子如圖,
葉子節點I1有1個樣本,I2有1個樣本,I3有3個樣本。
對於I1節點來說,G1=g1,H1=h1,
對於I2節點來說,G2=g4,H2=h4,
對於l3節點來說,G3=g2+g3+g5,H3=h2+h3+h5,
我們可以求出目標函數Obj,這個分數越小,代表這個樹的結構越好。
在這裏插入圖片描述
那麼問題來了,我們怎麼切割決策呢,我們之前在決策樹,是通過看信息增益,切哪裏信息增益大的就往哪裏切,在XGBoost,我們可以自己構造一個係數,來決定怎麼切 。pbl80MzE3MjY2MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
上面就是我們係數的表達式,講的是通過切割之後,算左右子樹的分數之和,減去不分割之前的分數,我們需要枚舉所有的分割可能,舉Gain值最小的那個分割辦法,用這種方法將我們的樹構造完成。

總結

XGBoost是一種高效的算法,可用於提升模型的準確性,將XGBoost的學習分爲三步:

  • 集成思想
  • 損失函數的分析
  • 新加入樹的分割
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章