理解GBDT算法(三)——基于梯度的版本
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
目錄(?)[+]
上一篇中我們講到了GBDT算法的第一個版本,是基于殘差的學習思路。今天來說第二個版本,可以說這個版本的比較復雜,涉及到一些推導和矩陣論知識。但是,我們今天可以看到,兩個版本之間的聯系,這個是學習算法的一個重要步驟。
這篇博文主要從下面這幾個方面來說基于梯度的GBDT算法:
(1)算法的基本步驟;
(2)其中的學數學推導;
(3)基于梯度的版本和基于殘差的版本之間的聯系;
在講解算法的詳細步驟之前,我們可以先明確一個思路,就是梯度版本的GBDT是用多類分類Multi-class classification 的思想來實現的,或者可以說GBDT的這個版本融入到多類分類中可以更好的掌握。
1. 算法的基本步驟
首先網上很多講解博客都會出現下面這個圖:
那么也就是說梯度版的GBDT的算法主要有8個步驟。
(0)初始化所有樣本在K個類別上的估計值。
F_k(x)是一個矩陣,我們可以初始化為全0,也可以隨機設定。如下:
上面的矩陣中,我們假設有N=8個樣本,每個樣本可能會屬于K=5個類別中的一個,其中估計值矩陣F初始化為0.
除此之外,這8個訓練樣本都是帶著類別標簽的,例如:
說明第i=1個樣本是屬于第3類的。
(1)循環下面的學習更新過程M次;
(2)對沒有樣本的函數估計值做logistic變換。
我們在前面介紹Logistic回歸的時候提到,Logistic函數一個重要的特性就是可以轉換為0~1之間的概率值,我們通過下面的變換公式就可以把樣本的估計值轉換為該樣本屬于某一類的概率是多少:
可以看到樣本初始的時候每個類別的估計值都是0,屬于類別的概率也是相等的,不過,隨著后面的不斷更新,其估計值不一樣了,概率自然也就差別開來。
比如下面:
(3)遍歷所有樣本的每個類別的概率
這一步需要注意,遍歷的是每個類別,而不是所有樣本。如下:
為什么這里是按照類別逐個學習呢?因為后面需要給每個類別k學習出一個回歸樹。
(4)求每個樣本在第k類上概率梯度
上面一步中,我們有了許多個樣本屬于某個類別k的概率,以及它們是否真正屬于類別k的概率(這些樣本都是訓練樣本,所以它們是否屬于某個類別都是已知的,概率為0/1)。那么這個就是一個典型的回歸問題。我們當然可以用回歸樹的算法來求解(注,這里就是多類分類問題和GBDT聯系的關鍵)。
我們通過常見的建立代價函數,并求導的梯度下降法來學習。代價函數是對數似然函數的形式為:
對這個代價函數的求導,我們可以得到:
(詳細的推導過程下一節給出)
有沒有發現這里的求導得到的梯度形式居然是殘差的形式:第i個樣本屬于第k個類別的殘差 = 真實的概率 - 估計的概率。
這一步也是殘差版本和梯度版本的聯系。
這些的梯度也是下面我們構建回歸樹的學習方向。
(5)沿著梯度方法學習到J個葉子結點的回歸樹
學習的偽代碼:
我們輸入所有樣本xi, i = 1~N, 以及每個樣本在第k個類別上概率的殘差作為更新方向,我們學習到有J個葉子的回歸樹。學習的基本過程和回歸樹類似:遍歷樣本的特征維數,選擇一個特征作為分割點,需要滿足最小均方差的原則,或者滿足【左子樹樣本目標值(殘差)和的平方均值+右子樹樣本目標值(殘差)和的平方均值-父結點所有樣本目標值(殘差)和的平方均值】最大的準則,一旦學習到J個葉子結點,我們就停止學習。結果是該回歸樹中每個葉子上都會有許多個樣本分布在上面。
記住:每個葉子上的樣本,既有自己屬于類別k的估計概率,也有真實概率,因為后面求增益需要用到它們。
(6)求每個葉子結點的增益
每個結點的增益計算公式為:
注意后標,每個葉子結點j都有一個增益值(不是向量,是值)。計算的時候需要用到該葉子結點上的所有樣本的梯度。
換句話說,每個葉子結點都可以計算出一個增益值,記住是值啊!
(7)更新所有樣本在第k類下的估計值
上一步中求得的增益是基于梯度計算得到的,而且前面說到的梯度和殘差有一定的關聯,我們可以利用這個增益更新樣本的估計值。
第m次迭代中的第k類下,所有樣本的估計值F可以通過上次迭代m-1中,這些樣本的估計值+增益向量求得。注意,這個增益向量需要把所有的J個葉子結點的增益值求和,然后和向量1相乘,而得。
也就是我們上面講的,第k類的所有樣本的估計值是一列:
也就是按列更新,前面有對類別數k的循環,所以每一類(每一列)的估計值都可以更新。一定記住是按列更新,每一類(每一列)都建立一個回歸樹來更新下去,最后原始的K類的N個樣本的估計值矩陣都更新了一遍,帶著這個新的估計值矩陣,我們進入下次m+1次的迭代學習。
如此,迭代學習M次之后,我們可以得到最終的所有樣本在所有類別下的估計值矩陣,基于這個估計值矩陣,我們可以實現多類分類。
這樣,基于梯度版本的GBDT算法的所有詳細步驟我們都說完了。
2. 公式推導
上面建立的代價函數是對數似然函數的形式:
對這個代價函數的求導,我們可以得到:
那么其中的詳細推導過程是什么呢?
其中涉及到對數函數的求導,主要是最后一步,yi是樣本屬于第k類的真實概率,故yi就是0/1數,而且K個類別中只可能屬于一個類別,也就是說只有一個yi是1,其余全是0,所以有最后一步推導結果。
3. 兩個版本之間的聯系
前面我們提到的一些聯系,這兒再總結一下:
- 基于殘差的版本四把殘差作為全局方向,偏向于回歸的應用。而基于梯度的版本是把代價函數的梯度方向作為更新的方向,適用范圍更廣。
- 如果使用Logistic函數作為代價函數,那么其梯度形式和殘差的形式類似,這個就說明兩個版本之間是緊密聯系的,雖然實現的思路不同,但是總體的目的是一樣的。或者說殘差版本是梯度版本的一個特例,當代價函數換成其余的函數,梯度的版本仍是適用的。
參考:
http://blog.csdn.net/w28971023/article/details/43704775
http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/1976562.html
http://blog.csdn.net/kunlong0909/article/details/17587101
http://blog.csdn.net/puqutogether/article/details/44752611
總結
以上是生活随笔為你收集整理的理解GBDT算法(三)——基于梯度的版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Newton-Raphson metho
- 下一篇: 论文解析:人脸检测中级联卷积神经网络的联