一、簡介
GBDT在傳統機器學習算法里面是對真實分布擬合的最好的幾種算法之一,在前幾年深度學習還沒有大行其道之前,gbdt在各種競賽是大放異彩。原因大概有幾個
一:效果確實挺不錯。
二:既可以用於分類也可以用於回歸。
三:可以篩選特征。
這三點實在是太吸引人了,導致在面試的時候大家也非常喜歡問這個算法。
GBDT是通過采用加法模型(即基函數的線性組合),以及不斷減小訓練過程產生的殘差來達到將數據分類或者回歸的算法。
GBDT通過多輪迭代,每輪迭代產生一個弱分類器,每個分類器在上一輪分類器的殘差基礎上進行訓練。對弱分類器的要求一般是足夠簡單,並且是低方差和高偏差的。因為訓練的過程是通過降低偏差來不斷提高最終分類器的精度。
二、GBDT如何用於分類的
第一步:訓練的時候,是針對樣本 X 每個可能的類都訓練一個分類回歸樹。如目前的訓練集共有三類,即K = 3,樣本x屬於第二類,那么針對樣本x的分類結果,我們可以用一個三維向量\([0, 1, 0]\)來表示,0表示不屬於該類,1表示屬於該類,由於樣本已經屬於第二類了,所以第二類對應的向量維度為1,其他位置為0。
針對樣本有三類的情況,我們實質上是在每輪的訓練的時候是同時訓練三顆樹。第一顆樹針對樣本x的第一類,輸入是\((x,0)\),第二顆樹針對樣本x的第二類,輸入是\((x,1)\),第三顆樹針對樣本x的第三類,輸入是\((x,0)\)。
在對樣本x訓練后產生三顆樹,對x 類別的預測值分別是\(f_1(x),f_2(x),f_3(x)\),那么在此類訓練中,樣本x屬於第一類,第二類,第三類的概率分別是:
\(P_1(x) = exp(f_1(x))/\sum_{k=1}^{3}exp(f_k(x))\)
\(P_2(x) = exp(f_2(x))/\sum_{k=1}^{3}exp(f_k(x))\)
\(P_3(x) = exp(f_3(x))/\sum_{k=1}^{3}exp(f_k(x))\)
然后可以求出針對第一類,第二類,第三類的殘差分別是:
\(y_{11} = 0 - P_1(x)\)
\(y_{22} = 1 - P_2(x)\)
\(y_{33} = 0 - P_3(x)\)
然后開始第二輪訓練,針對第一類輸入為\((x,y_{11}(x))\),針對第二類輸入為\((x,y_{22}(x))\),針對第三類輸入為\((x,y_{33}(x))\),繼續訓練出三顆樹。一直迭代M輪,每輪構建三棵樹
當訓練完畢以后,新來一個樣本\(x_1\),我們需要預測該樣本的類別的時候,便產生三個值\(f_1(x),f_2(x),f_3(x)\),則樣本屬於某個類別c的概率為:
\(P_c(x) = exp(f_c(x))/\sum_{k=1}^{3}exp(f_k(x))\)
三、GBDT 多分類舉例說明
下面以Iris數據集的六個數據為例來展示GBDT多分類的過程

具體應用到gbdt多分類算法。我們用一個三維向量來標志樣本的label,\([1, 0, 0]\)表示樣本屬於山鳶尾,\([0, 1, 0]\)表示樣本屬於雜色鳶尾,\([0, 0, 1]\)表示屬於維吉尼亞鳶尾。
gbdt 的多分類是針對每個類都獨立訓練一個 CART Tree。所以這里,我們將針對山鳶尾類別訓練一個 CART Tree 1。雜色鳶尾訓練一個 CART Tree 2 。維吉尼亞鳶尾訓練一個CART Tree 3,這三個樹相互獨立。
我們以樣本1為例:
針對CART Tree1 的訓練樣本是\([5.1, 3.5, 1.4, 0.2]\),label是1,模型輸入為\([5.1, 3.5, 1.4, 0.2, 1]\)
針對CART Tree2 的訓練樣本是\([5.1, 3.5, 1.4, 0.2]\),label是0,模型輸入為\([5.1, 3.5, 1.4, 0.2, 0]\)
針對CART Tree3 的訓練樣本是\([5.1, 3.5, 1.4, 0.2]\),label是0,模型輸入為\([5.1, 3.5, 1.4, 0.2, 0]\)
下面我們來看 CART Tree1 是如何生成的,其他樹 CART Tree2 , CART Tree 3的生成方式是一樣的。CART Tree的生成過程是從這四個特征中找一個特征做為CART Tree1 的節點。
比如花萼長度做為節點。6個樣本當中花萼長度大於等於5.1 cm的就是 A類,小於 5.1 cm 的是B類。生成的過程其實非常簡單,問題 1.是哪個特征最合適? 2.是這個特征的什么特征值作為切分點?
即使我們已經確定了花萼長度做為節點。花萼長度本身也有很多值。在這里我們的方式是遍歷所有的可能性,找到一個最好的特征和它對應的最優特征值可以讓當前式子的值最小:

我們以第一個特征的第一個特征值為例。R1為所有樣本中花萼長度小於5.1cm的樣本集合,R2為所有樣本中花萼長度大於等於5.1cm的樣本集合,所以\(R_1 = [2],R_2 = [1, 3, 4, 5, 6]\)

\(y_1\)為R1所有樣本label的均值:\(1/1=1\),\(y_2\)為R2所有樣本label的均值:
\((1+0+0+0+0)/5 = 0.2\)
下面計算損失函數的值,采用平方誤差,分別計算R1和R2的誤差平方和,樣本2屬於R1的誤差:\((1-1)^2 = 0\),樣本1,3,4,5,6屬於R2的誤差和:
\((1-0.2)^2 + (0-0.2)^2 + (0-0.2)^2 + (0-0.2)^2 + (0-0.2)^2 = 0.8\)
接着我們計算第一個特征的第二個特征值,即R1為所有樣本中花萼長度小於 4.9 cm 的樣本集合,R2 為所有樣本當中花萼長度大於等於4.9 cm 的樣本集合,\(R1 = [], R2 = [1,2,3,4,5,6]\),\(y_1\)為R1所有樣本label的均值:0,\(y_2\)為R2所有樣本label的均值:\((1+1+0+0+0+0)/6 = 0.3333\):

計算所有樣本的損失值,樣本1和2屬於R2,損失值為:\((1-0.3333)^2 + (1-0.3333)^2\),樣本3,4,5,6也屬於R2,損失值為:\((0-0.3333)^2 + (0-0.3333)^2 + (0-0.3333)^2 + (0-0.3333)^2\),兩組損失值和為2.222,大於特征一的第一個特征值的損失值,所以我們不取這個特征的特征值
繼續,這里有四個特征,每個特征有六個特征值,所有需要6*4 = 24個損失值的計算,我們選取值最小的分量的分界點作為最佳划分點,這里我們就不一一計算了,直接給出最小的特征花萼長度,特征值為5.1 cm。這個時候損失函數最小為 0.8。 於是我們的預測函數此時也可以得到:
\(f(x) = \sum_{x\epsilon R_1}y_1*I(x\epsilon R_1) + \sum_{x\epsilon R_2}y_2*I(x\epsilon R_2)\)
此例子中\(R1=[2],R2=[1,3,4,5,6],y_1=1,y_2=0.2\),訓練完以后的最終式子為:
\(f(x) = \sum_{x\epsilon R_1}1*I(x\epsilon R_1) + \sum_{x\epsilon R_2}0.2*I(x\epsilon R_2)\)
由這個式子,我們得到對樣本屬於類別1的預測值:\(f_1(x) = 1*1 + 0.2*5 = 2\),同理我們可以得到對樣本屬於類別2,3的預測值\(f_2(x),f_3(x)\),樣本屬於類別1的概率為:
\(P_1(x) = exp(f_1(x))/\sum_{k=1}^{3}exp(f_k(x))\)
四、參考
