GBRT 要點理解


 

1. 首先要理解Boost和Gradient Boost。 前者是在算法開始時候,,為每一個樣本賦上一個相等的權重值,也就是說,最開始的時候,大家都是一樣重要的。在每一次訓練中得到的模型,會使得數據點的估計有所差異,所以在每一步結束后,我們需要對權重值進行處理,而處理的方式就是通過增加錯分類點的權重,這樣使得某些點如果老是被分錯,那么就會被“嚴重關注”,也就被賦上一個很高的權重。然后等進行了N次迭代(由用戶指定),將會得到N個簡單的基分類器(basic learner),最后將它們組合起來,可以對它們進行加權(錯誤率越大的基分類器權重值越小,錯誤率越小的基分類器權重值越大)、或者讓它們進行投票等得到一個最終的模型。

Gradient Boost與傳統的Boost有着很大的區別,它的每一次計算都是為了減少上一次的殘差(residual),而為了減少這些殘差,可以在殘差減少的梯度(Gradient)方向上建立一個新模型。所以說,在Gradient Boost中,每個新模型的建立是為了使得先前模型殘差往梯度方向減少,與傳統的Boost算法對正確、錯誤的樣本進行加權有着極大的區別。 它主要的思想是,每一次建立模型是在之前建立模型損失函數的梯度下降方向。損失函數(loss function)描述的是模型的不靠譜程度,損失函數越大,則說明模型越容易出錯(其實這里有一個方差、偏差均衡的問題,但是這里假設損失函數越大,模型越容易出錯)。如果我們的模型能夠讓損失函數持續的下降,則說明我們的模型在不停的改進,而最好的方式就是讓損失函數在其梯度(Gradient)的方向上下降。

2. 要理解Gradient Boost有以下幾個步驟,

首先,我們需要有訓練集,損失函數和迭代次數。損失函數事實上是可以任意的,如果是平方損失函數,則對其求導就是殘差。損失函數是可以任意的。如使用指數損失函數,則可以對錯分樣本放大來boost。 

其次,初始化第一顆樹后,我們需要計算損失函數在現有模型上的梯度方向,這個向量就是算法下面的,這個向量怎么計算呢,對於平方損失函數來說,其求導就是殘差值,對其他損失函數,也可以根據求導函數求的

然后,根據這個梯度向量,以及 之前的樣本點,組成一個訓練集 ,根據這個訓練集,訓練一個較弱的分類器,這個分類器可以是tree,於是就成了GBRT,也可以是其他分類器,記做 

再然后,我們需要知道在第m次迭代后這個新的基分類器在整個模型中的權重,為了找到最佳權重,將新的基分類器加入到原來的整個模型組合中,記做,為了獲得h前的權重參數,利用 line search的方法,將其放入損失函數中,尋找最優的

最后,更新總體模型,至此一個循環結束 

 

算法流程如下:

 

需要注意幾點:

a. 每次迭代獲得的base learner,可以是樹也可以是其他分類器。 這個分類器前的權重,可以是針對一整顆樹的,也可以針對那顆樹的每個葉子節點的,如果是針對葉子節點的,則可以寫成:,其中J是葉子節點個數

b. 葉子節點的數目限制了base learner的大小,一般建議每顆樹的葉子節點在4-8 個內

c. 為了避免 過擬合的問題,通常會設置一個收斂參數 Shrinkage,這個參數在每次基分類器加入到整體模型時候起作用,簡單的說,就是 

d. 當GBRT用來解決分類問題的時候,其中的梯度向量事實上轉變成了概率梯度向量,即各分類的概率梯度方向,算法可以更新如下,通常損失函數可以定義為負的log似然

 

 

 3. GBRT的優缺點和參數

優點: 非線性變換比較多,表達能力強,而且不需要做復雜的特征工程和特征變換,防止過擬合

缺點:迭代樹有時序性,並行化比較困難且效果不佳

參數主要有:

1. 樹個數 (迭代次數 M)
2. 樹深度 
3. 縮放因子 
4. 損失函數 (通常是平方損失函數)
5. 數據采樣比 
6. 特征采樣比

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM