這篇博文主要從下面這幾個方面來說基於梯度的gbdt演算法:
(1)演算法的基本步驟;
(2)其中的學數學推導;
(3)基於梯度的版本和基於殘差的版本之間的聯絡;
在講解演算法的詳細步驟之前,我們可以先明確乙個思路,就是梯度版本的gbdt是用多類分類multi-class classification 的思想來實現的,或者可以說gbdt的這個版本融入到多類分類中可以更好的掌握。
首先網上很多講解部落格都會出現下面這個圖:
那麼也就是說梯度版的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演算法的所有詳細步驟我們都說完了。
上面建立的代價函式是對數似然函式的形式:
對這個代價函式的求導,我們可以得到:
那麼其中的詳細推導過程是什麼呢?
其中涉及到對數函式的求導,主要是最後一步,yi是樣本屬於第k類的真實概率,故yi就是0/1數,而且k個類別中只可能屬於乙個類別,也就是說只有乙個yi是1,其餘全是0,所以有最後一步推導結果。
前面我們提到的一些聯絡,這兒再總結一下:
參考:
理解GBDT演算法(三) 基於梯度的版本
這篇博文主要從下面這幾個方面來說基於梯度的gbdt演算法 1 演算法的基本步驟 2 其中的學數學推導 3 基於梯度的版本和基於殘差的版本之間的聯絡 在講解演算法的詳細步驟之前,我們可以先明確乙個思路,就是梯度版本的gbdt是用多類分類multi class classification 的思想來實現...
GBDT梯度提公升之回歸演算法個人理解
前面的文章中介紹了梯度提公升方法,將梯度提公升方法中的基學習器替換成cart回歸樹模型,梯度提公升方法就變成了梯度提公升回歸樹gbdt方法。gbdt演算法的思想與提公升樹演算法類似,不同點在於殘差的計算 1 首先對於資料集初始化乙個簡單模型 2 計算損失函式對於函式 為例,損失函式關於 3 計算第二...
GBDT與XGBoost 基於負梯度擬合 的說明
為了不讓自己在深度學習的網路裡迷失 嗝 回顧了一下機器學習 相信大家看到整合學習的時候,類似於adaboost等思路還是挺清晰的,bdt裡面的基於擬合殘差思想也好理解,但是碰到gbdt時候有點蒙蔽 只針對小白,大佬繞行 這怎麼就變成了根據損失函式的負梯度擬合呢,編輯公式有點煩,我就把pad筆記拿上來...