4.2 細節
4.2.1 損失函數
Adaboost 模型是加法模型,學習算法為前向分步學習算法,損失函數為指數函數的分類問題。
加法模型:最終的強分類器是由若干個弱分類器加權平均得到的。
前向分布學習算法:算法是通過一輪輪的弱學習器學習,利用前一個弱學習器的結果來更新后一個弱學習器的訓練集權重。第 k 輪的強學習器為:
定義損失函數為 n 個樣本的指數損失函數:
利用前向分布學習算法的關系可以得到:
因為 已知,所以令 ,隨著每一輪迭代而將這個式子帶入損失函數,損失函數轉化為:
我們求 ,可以得到:
將 帶入損失函數,并對求導,使其等于 0,則就得到了:
其中, 即為我們前面的分類誤差率。
最后看樣本權重的更新。利用 和 ,即可得:
這樣就得到了樣本權重更新公式。
4.2.2 正則化
為了防止 Adaboost 過擬合,我們通常也會加入正則化項,這個正則化項我們通常稱為步長(learning rate)。對于前面的弱學習器的迭代
加上正則化項 我們有:
的取值范圍為 0<≤1 。對于同樣的訓練集學習效果,較小的 意味著我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定算法的擬合效果。
4.3 優缺點
4.3.1 優點
- 分類精度高;
- 可以用各種回歸分類模型來構建弱學習器,非常靈活;
- 不容易發生過擬合。
4.3.2 缺點
- 對異常點敏感,異常點會獲得較高權重。
5. GBDT
GBDT(Gradient Boosting Decision Tree)是一種迭代的決策樹算法,該算法由多棵決策樹組成,從名字中我們可以看出來它是屬于 Boosting 策略。GBDT 是被公認的泛化能力較強的算法。
5.1 思想
GBDT 由三個概念組成:Regression Decision Tree(即 DT)、Gradient Boosting(即 GB),和 Shrinkage(一個重要演變)
5.1.1 回歸樹(Regression Decision Tree)
如果認為 GBDT 由很多分類樹那就大錯特錯了(雖然調整后也可以分類)。對于分類樹而言,其值加減無意義(如性別),而對于回歸樹而言,其值加減才是有意義的(如說年齡)。GBDT 的核心在于累加所有樹的結果作為最終結果,所以 GBDT 中的樹都是回歸樹,不是分類樹,這一點相當重要。
回歸樹在分枝時會窮舉每一個特征的每個閾值以找到最好的分割點,衡量標準是最小化均方誤差。
5.1.2 梯度迭代(Gradient Boosting)
上面說到 GBDT 的核心在于累加所有樹的結果作為最終結果,GBDT 的每一棵樹都是以之前樹得到的殘差來更新目標值,這樣每一棵樹的值加起來即為 GBDT 的預測值。
模型的預測值可以表示為:
為基模型與其權重的乘積,模型的訓練目標是使預測值 逼近真實值 y,也就是說要讓每個基模型的預測值逼近各自要預測的部分真實值。由于要同時考慮所有基模型,導致了整體模型的訓練變成了一個非常復雜的問題。所以研究者們想到了一個貪心的解決手段:每次只訓練一個基模型。那么,現在改寫整體模型為迭代式:
這樣一來,每一輪迭代中,只要集中解決一個基模型的訓練問題:使 逼近真實值 y 。
舉個例子:比如說 A 用戶年齡 20 歲,第一棵樹預測 12 歲,那么殘差就是 8,第二棵樹用 8 來學習,假設其預測為 5,那么其殘差即為 3,如此繼續學習即可。
那么 Gradient 從何體現?其實很簡單,其殘差其實是最小均方損失函數關于預測值的反向梯度(劃重點):
也就是說,預測值和實際值的殘差與損失函數的負梯度相同。
但要注意,基于殘差 GBDT 容易對異常值敏感,舉例:
很明顯后續的模型會對第 4 個值關注過多,這不是一種好的現象,所以一般回歸類的損失函數會用絕對損失或者 Huber 損失函數來代替平方損失函數。
GBDT 的 Boosting 不同于 Adaboost 的 Boosting,GBDT 的每一步殘差計算其實變相地增大了被分錯樣本的權重,而對與分對樣本的權重趨于 0,這樣后面的樹就能專注于那些被分錯的樣本。
5.1.3 縮減(Shrinkage)
Shrinkage 的思想認為,每走一小步逐漸逼近結果的效果要比每次邁一大步很快逼近結果的方式更容易避免過擬合。即它并不是完全信任每一棵殘差樹。
Shrinkage 不直接用殘差修復誤差,而是只修復一點點,把大步切成小步。本質上 Shrinkage 為每棵樹設置了一個 weight,累加時要乘以這個 weight,當 weight 降低時,基模型數會配合增大。
5.2 優缺點
5.2.1 優點
- 可以自動進行特征組合,擬合非線性數據;
- 可以靈活處理各種類型的數據。
5.2.2 缺點
- 對異常點敏感。
5.3 與 Adaboost 的對比
5.3.1 相同:
- 都是 Boosting 家族成員,使用弱分類器;
- 都使用前向分布算法;
5.3.2 不同:
- 迭代思路不同:Adaboost 是通過提升錯分數據點的權重來彌補模型的不足(利用錯分樣本),而 GBDT 是通過算梯度來彌補模型的不足(利用殘差);
- 損失函數不同:AdaBoost 采用的是指數損失,GBDT 使用的是絕對損失或者 Huber 損失函數;
6. 參考
-
機器學習算法中 GBDT 與 Adaboost 的區別與聯系是什么? - Frankenstein 的回答 - 知乎
-
為什么說bagging是減少variance,而boosting是減少bias
-
Ensemble Learning - 周志華
發布評論請先 登錄
相關推薦
評論