十四、GBDT的構成
● GBDT由三部分構成:DT(Regression Decistion Tree-回歸決策樹)、GB(Gradient Boosting-梯度提升)、Shrinkage(衰減)
1、先構建回歸決策樹,然后用到提升的思想:ft(x) = ∑ ht(x);
2、梯度提升: 下一個模在擬合上一個模型的殘差,其實就等價于在擬合上一個模型的梯度。
3、衰減: ft(x) = step × ∑ ht(x); 衰減指公式里的step值,上一章最后有詳述。
● 由多棵決策樹組成,所有樹的結果累加起來就是最終結果。(上一章的例子中可以直觀感受到這一點。)
● 迭代決策樹和隨機森林的區別:
1、隨機森林使用抽取不同的樣本,構建不同的子樹。也就是說第m棵樹的構建和前m-1棵樹的結果是沒有關系的。(所以人家可以同時構建所有的樹)
2、迭代決策樹在構建子樹的時候,使用之前子樹構建結果后,形成的殘差作為輸入數據,再構建下一個子樹;然后最終預測的時候按照子樹構建的順序進行預測,并將預測結果相加。(而你要看前面人的臉色行事)
十五、GBDT算法原理
1、 給定輸入向量X和輸出變量Y組成的若干訓練樣本(X1,Y1),(X2,Y2)...(Xn,Yn),目標是找到近似函數F(X),使得損失函數L(Y,F(X))的損失值最小。
其實機器學習這個領域,本質上都想達到這個目標。正如我在第一章里說的,我們盡可能想要找到一個模型,符合造物主公式。無論哪種機器學習的模型,我們都在追求損失函數最小。
2、 L損失函數一般采用最小二乘損失函數或者絕對值損失函數。
F(X)是常數。(參考第7步)
● 看左邊最小二乘的公式,關于F(X)求偏導,得到F(X)-y 。F(X)是真實值y的均值的時候,該損失函數最小。
● 看右邊的絕對值損失函數,當F(X)是中位數的時候損失最小。
3、 最優解為:
比較最小二乘損失函數和絕對值損失函數,哪個更小就選哪個。
4、 假定F(X)是一組最優基函數 fi(X) 的加權和(即衰減的思想)
原本14,16,24,26,一下子變成-1,1,-1,1,變化幅度太大了,所以加上縮放系數。
5、用貪心算法的思想擴展得到 Fm(X),求解最優 f 。
貪心算法(相鄰兩步的解最優):在當前的情況下,求解下一步的最優解。當算法包含若干步的時候,貪心算法只能保證下一步的算法是最優解,而不能保證在整個求解的過程中獲得全局最優解。
使用貪心算法考慮GBDT問題:每求一步基模型,都是當前步驟的最優情況。如下圖所示:第m步的強模型= 第m-1的強模型 + 使得損失函數達到最小時候的對應的基模型: fm(Xi) 。
但這個基模型 fm(Xi)不能保證在未來的全局中它是最優的模型。
6、如果以貪心算法在每次選擇最優基函數 f 時仍然困難,使用梯度下降法近似計算。
7、給定常數函數 F0(X) 第2步中提到的F(X)
即得損失函數L最小的時候,對應的yi和c,構成了常數函數 F0(X)。
這個常數不是隨便給的,比如當你選擇使用最小二乘構建損失函數的時候,如果下圖中的樣本不是一個30歲,而是(14,16,24,26),那么我們預測的F(X)常數應該是均值,即F(X) = (14+16+24+26)/4 = 20。此時損失函數= (14-20)^2 + (16-20)^2 + (24-20)^2 + (26-20)^2 = 104。在相同標準下,如果這個損失函數值最小,那么用 F(X)=20作為常數作為這一步的基模型構建最優。此時yi和c分別為 (14,6) (16,4) (24,4) (26,6),下一步要預測的真實值(殘差) = (6,4,4,6)
8、根據梯度下降計算學習率
在第7步我們得到了F(X)的值,作為這一步的輸入。
這里將損失函數對F(X)進行求導,在第2步中我們可以看到,當對最小二乘進行求導后,得到 |y-F(X)| 。這是針對一個樣本求導,如果是所有的樣本求導并求和,得到的是 ∑|y-F(X)| ,這就是最小二乘損失函數的導函數。
這里的αim(第i個樣本集的第m個模型對應的學習率) 就是下一步模型中的需要預測的真實值y,學習率αim可以近似看成是殘差。(偽殘差)
9、使用數據(xi,αim) (i=1……n )計算擬合殘差找到一個CART回歸樹,得到第m棵樹。
第m棵樹是什么樣的?
作為一個樣本X,將X放入模型之后,最終會落到某個葉子節點中。這個葉子節點中對應了一個目標值。
左邊 - 最優的單個葉子節點,決策樹每次找到的都是一個常量。右邊 - 第m棵樹,公式含義:首先判斷x是否屬于葉子,屬于返回1,不屬于返回0。對于所有的leaf葉子,x最終只屬于一個葉子。
10、更新模型
十六、GBDT回歸算法和分類算法的區別
1、兩者唯一的區別就是選擇不同的損失函數。
2、回歸算法選擇的損失函數一般是均方差(最小二乘)或者絕對值誤差;而在分類算法中一般的損失函數選擇對數函數來表示。
十七、GBDT scikit-learn相關參數
GBDT的代碼和AdaBoosting類似,這里簡單對其相關的參數進行介紹:
工作中對常用的參數如何選擇會問得比較多。
比較關鍵的是n_estimators 和 learning_rate的設置。
當上面兩個參數怎么調都調不好模型的時候,嘗試使用subsample參數。
十八、GBDT總結
GBDT的優點如下:
1、可以處理連續值和離散值;
2、在相對少的調參情況下,模型的預測效果也會不錯;
3、模型的魯棒性比較強。
GBDT的缺點如下:
由于弱學習器之間存在關聯關系,難以并行訓練模型。
十九、Bagging、Boosting的區別
1、樣本選擇:Bagging算法是有放回的隨機采樣;Boosting算法是每一輪訓練集長度不變,是訓練集中的每個樣例在分類器中的權重發生變化(Adaboost),而權重根據上一輪的分類結果進行調整;對于GBDT來說,目標值Y實際上發生了變化,基于梯度來確定新的目標Y。
2、樣例權重:Bagging使用隨機抽樣,樣例的權重相等;Boosting(Adaboost)根據錯誤率不斷的調整樣例的權重值,錯誤率越大則權重越大;
3、預測函數:Bagging所有預測模型的權重相等;Boosting(Adaboost)算法對于誤差小的分類器具有更大的權重。
4、并行計算:Bagging算法可以并行生成各個基模型;Boosting理論上只能順序生產,因為后一個模型需要前一個模型的結果;
5、Bagging是減少模型的variance(方差);Boosting是減少模型的Bias(偏度)。
6、Bagging里每個分類模型都是強分類器,因為降低的是方差,方差過高需要降低是過擬合;Boosting里每個分類模型都是弱分類器,因為降低的是偏度,偏度過高是欠擬合。
7、方差和偏差的問題:error = Bias + Variance
Bagging對樣本重采樣,對每一輪的采樣數據集都訓練一個模型,最后取平均。由于樣本集的相似性和使用的同種模型,因此各個模型的具有相似的bias和variance;