梯度提升樹模型(Gradient Boosted Decision Tree)
與随機森林的對比
前面提到的随機森林使用Bagging的方式融合起來,也就是使用bootstrapping進行抽樣得到不同的樣本再加上不同的特征選擇訓練出不同的決策樹g來然後進行不同種類的融合最後組成森林。
提升樹模型則是使用了Adaboost模型的融合方式。Adaboost模型主要強調模型在每一次做決策的時候都會調整模型對于每一筆資料的權重(給予犯錯誤的資料更大的權重,減小正确資料的權重)。這樣訓練出了每一個模型最後融合起來。
帶有權重的決策樹
在以前我們想要模拟一筆資料帶有一些權重會将這筆資料複制相應的倍數。比如說要給這筆資料賦予100倍的權重那麼就将這筆資料複制100份。在這裡設計一個帶有權重的決策樹模型并非易事是以我們通過與權重比例相同的抽樣來等效帶有權重性質的演算法。
選擇弱的樹
在所有筆資料都不同的時候如果做一顆決策樹在不斷切割下去的時候就會長成完全長成樹,完全長成樹的Ein(損失函數值)為0,對應到權重的角度來看就是把所有的權重都給了這棵樹,這樣的情形也非常容易過拟合。再加上Adaboost演算法我們現在渴望一些不是很強的樹,我們要為這些很強的樹剪枝。
當樹為一層的時候就相當于一個分類器模型,我們隻是把資料切一刀使得兩邊的不純度的和最小。這時我們在權重方面的考慮就無需做等價的抽樣了而是直接将權重考慮到算法中。
Adaboost的新角度
投票分數和邊距
在Adaboost演算法中我們知道每一個點的權重就等于這個點上一輪的權重乘上或除以更新量,而且這個更新量與最後融合起來的投票權重α有一定的關系如下圖所示:
将Adaboost中的最後一輪的權重計算出來發現其中的一部分與最後模型融合時的得分函數有如下的聯系:
最後的權重正比于exp(-y*得分函數)。如果把得分函數中g(x)作為一個特征轉換則最後的得分函數可以看作是一個在SVM中沒有正規化的邊界:
借助這個相似性我們想要這個邊界在正确的方向上越大越好,也就是我們的投票函數(得分函數)是正的而且是大的。最後我們得到了一個最優化的政策就是盡可能的最小化最後一輪的權重,而事實上在Adaboost中每一輪的權重之和确實在減小也就是Adaboost隐形的做好了寬的邊界和正的值:
Adaboost的損失函數
根據上面最小化的函數我們知道了可以通過最小化Err(ADA) = exp(-y*得分函數)來使得演算法得到最優解。Err(ADA)與0/1錯誤的函數圖像如下圖所示:
從圖中我們可以得知我們可以通過求出Err(ADA)的上限來做好0/1的二進制分類問題。
隐含的梯度下降法
将Err(ADA)經過變形與與泰勒展開式的近似展開會得到下圖:
把上面這個式子與梯度下降法的式子類比,就會發現如果找到一個好的g也就相當于找到了一個好的梯度下降的方向。一般來說梯度下降的方向會是一個向量但是一個函數與向量有極大地相似性。向量是給定一個次元會得到一個相應的值,函數也是給定一個變量會得到一個相應的值。不同的是向量是離散的函數是連續的。是以我們經過訓練得到一個好的g也是隐含的選擇好了一個梯度下降的方向。實務上Adaboost就會為我們找到一個很好的g。
當我們找到一個好的方向之後下一步我們就要在這個方向上下降更新。但是計算g這個方向是比較消耗成本的是以我們想要在每一次下降的時候盡量走出比較大的步子。是以我們根據簡化後的Err(ADA)再令函數關于η的倒數為0得到最大的η。經過變換每一步最大的η也就是α,從這裡我們又看出了Adaboost也間接地做好了梯度下降步幅的大小,如下圖所示:
有了上面這些解釋我們也認識到了Adaboost的另一個解釋可以概括為:近似的(泰勒展開)函數式(g)最大梯度(α)下降法。
GBDT
損失函數的推廣
現在我們知道了Adaboost演算法的核心可以了解為一個特殊的梯度下降法隻是它的損失函數為指數函數。如果我們将Adaboost中的損失函數推廣到一般的函數這個演算法也就成為了GradientBoost,這個演算法可以推廣到其它不同的錯誤比如說回歸或者是軟性分割。
梯度的方向
我們将原始錯誤函數進行轉化,然後再使用泰勒展開式進行近似等價(主要是圍繞函數在某一個方向上的移動在梯度方向上的分量就相當于梯度下降的更新量)。要求出最優的方向就是要求出下降最快時方向的值(h(x)的值)。如下圖所示:
當我們決定了這一輪最佳的方向之後,按照上面的原則當h(x)為-∞的時候下降的最快。但是一般情況h(x)隻負責方向而η負責步幅的大小,是以我們要對h(x)的大小做一些限制。按照有條件最佳化問題的解答我們習慣于将這些條件放到我們要最佳化的問題裡面(比如說拉格朗日乘子法)。我們将h(x)當做是一個懲罰項,h(x)越大我們越不喜歡它如果小了還不錯。經過一些轉換求最優的h(x)的問題換成了一個h(x)與(y-s)的一個回歸問題如下圖所示:
梯度的步幅
當方向固定下來損失函數的最小問題也就變成了一個關于η的一個單變數的問題了:
把g(x)當做是一個轉換(它現在是一個常數),(y-s)仍為餘數整個問題也是一個回歸問題。當ηg(x)與餘數最接近的時候就得到了最優的η值。這個過程就對應到Adaboost中最後融合小模型時求解每個模型獲得的票數α。
GBDT(以回歸問題為例)
梯度增強樹模型主要分為以下幾4個步驟:
首先将所有的餘數都初始化為0,做一個原始的回歸問題。
①利用決策樹模型做一個解決回歸問題得到最好的梯度方向。
②再計算一次回歸問題得到梯度方向最好的步幅大小。
③使用已有的方向與步幅進行梯度下降更新得分函數。重複①到③步直到達到某一個程度的最優解。
實務上GBDT經常用于搜尋引擎中的推薦和排序。