Xgboost原理推導
XGBoost全名叫(eXtreme Gradient Boosting)極端梯度提升,經常被用在一些比賽中,其效果顯著。它是大規模並行boosted tree的工具,它是目前最快最好的開源boosted tree工具包。下面我們將XGBoost的學習分為3步:①整合思想 ②損失函式分析 ③求解。我們知道機器學習三要素:模型、策略、演算法。對於整合思想的介紹,XGBoost演算法本身就是以整合思想為基礎的。所以理解清楚整合學習方法對XGBoost是必要的,它能讓我們更好的理解其預測函式模型。在第二部分,我們將詳細分析損失函式,這就是我們將要介紹策略。第三部分,對於目標損失函式求解,也就是演算法了。
一、整合思想
在學習XGBoost之前,我們得需要先明白整合思想。整合學習方法是指將多個學習模型組合,以獲得更好的效果,使組合後的模型具有更強的泛化能力。另外XGBoost是以分類迴歸樹(CART樹)進行組合。故在此之前,我們先看下CART樹(CART樹具體原理請自行復習,或者可以留言)。如下,通過輸入使用者年齡、性別進行判斷使用者是否喜歡玩遊戲的得分值。由此得到一顆CART樹模型。
我們知道對於單個的決策樹模型容易出現過擬合,並且不能在實際中有效應用。所以出現了整合學習方法。如下圖,通過兩棵樹組合進行玩遊戲得分值預測。其中tree1中對小男生的預測分值為2,tree2對小男生的預測分值為0.9。則該小男生的最後得分值為2.9。
將上面整合學習方法推廣到一般情況,可知其預測模型為:
其中為樹的總個數,表示第顆樹,表示樣本的預測結果。
損失函式為:
其中為樣本的訓練誤差,表示第顆樹的正則項。
二、損失函式
上面一部分我們知道了整合學習方法的預測模型,因為XGBoost也是整合學習方法的一種。對於XGBoost的預測模型同樣可以表示為:
其中為樹的總個數,表示第顆樹,表示樣本的預測結果。
其中損失函式也同樣表示為:
其中為樣本的訓練誤差,表示第棵樹的正則項。
看到了這裡,我們可能會想到,現在知道了模型預測函式和損失函式,那我們是不是直接就能求出其預測模型了呢?答案肯定不是,我們首先需要明確知道優化和求解的引數是什麼呢?由上面的預測模型中,我們可以看到對於每棵樹的預測值
對於加法策略可以表示如下:
初始化(模型中沒有樹時,其預測結果為0):
往模型中加入第一棵樹:
往模型中加入第二棵樹:
…
往模型中加入第t棵樹:
其中表示第棵樹,表示組合棵樹模型對樣本的預測結果。
我們知道,每次往模型中加入一棵樹,其損失函式便會發生變化。另外在加入第t棵樹時,則前面第t-1棵樹已經訓練完成,此時前面t-1棵樹的正則項和訓練誤差都成已知常數項。對於每棵樹的正則項部分,我們將在後面再細說。
如果損失函式採用均方誤差時,其目標損失函式變為:
另外對於目標損失函式中的正則項(複雜度)部分,我們從單一的樹來考慮。對於其中每一棵迴歸樹,其模型可以寫成:
其中為葉子節點的得分值,表示樣本對應的葉子節點。為該樹的葉子節點個數。
因此,在這裡。我們將該樹的複雜度寫成:
複雜度計算例子如下:
此時,對於XGBoost的目標函式我們可以寫為:
三、求解
在推導之前,我們先介紹下泰勒展開式:
這裡我們用泰勒展開式來近似原來的目標函式,將看作。則原目標函式可以寫成:
令,,同時對於第t棵樹時,為常數。同時去除所有常數項。故目標損失函式可以寫成:
由上面介紹書的複雜度時,我們知道:,同時我們將目標函式全部轉換成在第t棵樹葉子節點的形式。因為目前對於可以看做是每個樣本在第t棵樹的葉子節點得分值相關函式的結果之和,所以我們也能從第t棵樹的葉子節點上來表示。
其中為第t棵樹中總葉子節點的個數,表示在第個葉子節點上的樣本,為第個葉子節點的得分值。
在這裡,令,。
則:
對求偏導,並使其導函式等於0,則有:
求解得:
其目標函式可以為:
到此,推導完成。