一、xgboost的原理
首先值得說明的是,xgboost是gbdt的公升級版,有興趣的話可以先看看gbdt的推導。xgboost同樣是構造一棵棵樹來擬合殘差;
不同之處在於
(1)gbdt使用一階導,xgboost使用二階導。
(2)xgboost在loss中包括模型複雜度,gbdt沒有。
首先我們來定義一下模型:
1.符號定義:
2.模型定義
假設我們迭代t輪,意味著我們要生成t棵殘差樹:
值得注意的幾點:
1.其實一般來說,前面還要加上乙個,但是作者在這裡初始化的時候將設定為0,所以不用加了。
2.f
tf_t
ft(x
ix_i
xi)表示的是第t棵殘差樹對x
ix_i
xi的第t輪殘差的**值。
3.每一輪殘差)樹的訓練資料是什麼呢?假如,y
ty^t
yt表示t棵cart殘差樹的和,也就是最終**值,y表示x的真實標籤,那麼第t+1棵樹的訓練資料就是(x,y-y
ty^t
yt)
4.f是殘差樹的函式空間。
5.從函式的角度來說,每乙個殘差樹類似乙個分段函式。
3.損失函式定義
從公式的角度,xgboost的誤差**主要是:訓練誤差和模型複雜度。
4.如何訓練殘差樹?
由於xgboost採取的是增量訓練,也就是說只有前一棵樹訓練好了,才能開始訓練下一棵樹。這也就意味著,當我訓練第t棵樹的時候,1~t-1棵樹的引數都是固定的了,與其相關的量都是常量。我們可以將目標函式簡化一下:
上面的損失函式是沒有具體到每一輪的訓練,為了方便推導,我們把第t輪的loss表示如下:
由於存在以下關係:
對於第一部分loss,根據泰勒展開式
我們把yit
+1y_i^
yit+1
當作x,f
tf_t
ft(x
ix_i
xi)當作dxdx
,那麼訓練loss可以化簡為:
那麼總loss變為:
在這個目標函式中,我們需要求的就只有第t棵殘差樹的引數了。那麼一棵樹的引數又包括哪些呢?或者說我們要怎樣去表示這棵樹呢?在xgboost的原作者ppt中是這樣定義的:
其中,q(x)就表示x屬於哪乙個葉子節點,比如說是第三個葉子節點,那麼wq(x)就表示第三個葉子節點的權值了,也可以理解為ft對x第t輪殘差的的**值。另外k表示葉子節點的個數(我用的符號和原ppt不太一樣,原ppt用的符號是t,感覺和殘差樹的個數搞重了,所以就換了乙個符號)。
下面說一下,模型複雜度的定義:
k是葉子節點的個數,k值越小,樹的結構就越簡單,從而不容易過擬合,這個很好理解,但是為什麼還要限制w呢,從某種意義上來說,w是f
tf_t
ft對x第t輪殘差的的**值,這個有必要限制嘛?我的思考是這樣的:xgboost不希望一次性就把資料擬合得很好,而是每次擬合乙個大概就可以了,反正還可以繼續學的,也就是說每個殘差樹都是乙個弱分類器,這樣也可以防止過擬合。其實這也是boosting乙個比較重要的思想。那麼如何限制分類器擬合得太好呢,直接限制w的取值就可以了,試想如果某乙個w很大,那麼當前這棵棵殘差樹在所有殘差樹就佔很大的權重,這樣就容易導致過擬合了。(自己的理解,有錯請指正)。
接下來,我們我們用具體的**值來代替函式,在下面的變換中,loss的計算由以樣本為單位求和變味了以葉子節點為單位求和。
因為g和h都是常數,那麼這個問題就變成了乙個二次問題了,求解最小值的方法就不多說了,直接給出結果
我們說,目前我們得到的最優結果是基於這棵樹的結構已經確定的情況下得到的,但是樹的結構有很多種,那麼該如何確定這棵樹的結構呢?
原**中採取貪婪演算法來生成這棵樹:
1.從根節點開始;
2.遍歷所有特徵
3.對於每乙個特徵,如果是連續型特徵,則將其按照從小到大排列,我們樣本數量假設有n個,那麼這個連續型的特徵的切分點就有n-1個,我們就在每乙個切分點都計算出乙個「**增益值」,這個**增益值是什麼意思呢?它是用來判斷當前節點要不要進行**,如果**那麼選擇哪個特徵的哪個切分點最好。那麼**增益值要怎麼算呢?原**給出的演算法如下:
要知道,**後的改變就是葉子節點數多了乙個,然後樣本被劃分到不同的葉子節點。這個gain公式的原理用白話講就是,用左節點增益加右節點增益減去未進行**前的那個節點的增益減去因為多增加了乙個節點而產生的,那麼為什麼可以表示乙個節點的收益呢?由於(剛剛計算出的當樹結構確定時的最優總loss),仔細觀察其結構,就是葉子節點總數乘以乙個係數減去所有葉子節點的和乘以乙個係數,為了使得loss減小,那麼越大越好,因此我們可以將當作是第k個葉子節點的增益。
BP演算法的推導
bp演算法步驟 1 正向傳播 輸入樣本 輸入層 各隱層 處理 輸出層 注1 若輸出層實際輸出與期望輸出 教師訊號 不符,則轉入2 誤差反向傳播過程 2 誤差反向傳播 輸出誤差 某種形式 隱層 逐層 輸入層 其主要目的是通過將輸出誤差反傳,將誤差分攤給各層所有單元,從而獲得各層單元的誤差訊號,進而修正...
SVPWM演算法的推導
博文預設採用恆幅值變換,若是用到恆功率變換的時候,會特別說明。推導過程其實有很多種,雲龍混雜,看著看著自己就暈了,所以最好找一種自己好理解的。有關座標變換的理論,參考座標變化這篇部落格 先回憶一下電力電子逆變電路的知識,我們把u dc分成兩半,假設其中間有乙個中性點o,那麼我們可以得到s a導通時,...
KMP演算法推導
申明 此文系博主對huge對kmp演算法的推導過程的加工整理而成,在讀此文之前,如果對kmp演算法不是非常了解的,可以去到閱讀有關kmp的相關知識,如果已經非常了解,那就請繼續吧。有了以上的資料了解後,讓我們一起來推導和構建kmp演算法吧。定義 a是問題中模式串 短串 長度為n b是問題中的文字串 ...