這里以二元分類為例子,給出最基本原理的解釋
GBDT 是多棵樹的輸出預測值的累加
GBDT的樹都是 回歸樹 而不是分類樹
- 分類樹
分裂的時候選取使得誤差下降最多的分裂
計算的技巧
最終分裂收益按照下面的方式計算,注意圓圈內的部分是固定值
- GBDT 二分類
GBDT在實現中可以完全復用上面的計算方法框架,只是我們的優化的目標函數不同。
這里使用的是 指數誤差函數,不管是預測正確還是錯誤 誤差值都存在,但是正確的預測 會使得誤差值小於錯誤的預測 參考
AdaBoost and the Super Bowl of Classifiers
A Tutorial Introduction to Adaptive Boosting
關於常用誤差函數 參考 http://www.cnblogs.com/rocketfan/p/4083821.html
參考 Greedy Functon Approximation:A Gradient Boosting Machine
4.4節關於二分類情況誤差函數的設計
這里其實和上面給出的一樣,只是增加了 log(1 +, 另外多了一個2,2yF), 參考前面的LossFunction http://www.cnblogs.com/rocketfan/p/4083821.html
的推導,其實這個應該算作LogLoss或者說是logistic regression, cross entropy error,也就是從probablity出發的logloss推導到output F(x)的表示就是上面的
式子,而它看上去剛好就是一個指數誤差函數。
嚴格意義上說是LogLoss不是指數誤差 不過LogLoss和指數誤差看上去比較相似。
這個F值其實就是邏輯回歸的思路,類似 語音語言處理一書27頁解釋,線性加權的值(output)用來預測 p(true)和p(false)的比例的log值(回歸值是實數范圍取值不適合預測0-1,做了一個轉換),越是接近true,那么F(x)越接近+無窮(對應最大可能性判斷true), p(false)越大 那么越接近-無窮(對應最大可能性判斷false)
F(X) 對應 feature X 當前的回歸預測值也就是多棵樹經過決策到達葉子節點的輸出值output(x)的累加值。N個樣本則F(x)N個維度,當開始沒有分裂的時候所有樣本在一個節點則所有F(x)對應一個相同的值,分裂一次后兩個葉子節點則F(X)對應可能到不同的葉子節點從而可能有兩個不同的值。
對誤差函數計算關於F的梯度,誤差函數是
變量是F(x)
考慮learning_rate之后是 (@TODO)
F(X) 對應 葉子節點中一個樣本對應它的feature X 當前的預測值
參考 機器學習概率角度 一書的16章
我們的分裂目標從上面回歸樹基本算法中的希望逼近y 變成了 逼近梯度值 r_im,
也就是說當前樹是預測負梯度值的。
F_m(x) = F_m-1(x) + learning_rate*(當前樹的預測值(也就是預測負梯度..)) //@TODO check
再對比下ng課件最簡單的梯度下降 針對regression的例子
我們采用的每顆樹更新策略是針對F(x)的,而F(x)沿着梯度的方向的累加,目標是使得我們的
誤差函數達到最小。