最常用的決策樹演算法!Random Forest、Adaboost、GBDT 演算法
編輯 | datawhale
本文主要介紹基於整合學習的決策樹,其主要通過不同學習框架生產基學習器,並綜合所有基學習器的預測結果來改善單個基學習器的識別率和泛化性。
整合學習
常見的整合學習框架有三種:Bagging,Boosting 和 Stacking。三種整合學習框架在基學習器的產生和綜合結果的方式上會有些區別,我們先做些簡單的介紹。
1.1 Bagging
Bagging 全稱叫 Bootstrap aggregating,看到 Bootstrap 我們立刻想到著名的開源前端框架(抖個機靈,是 Bootstrap 抽樣方法) ,每個基學習器都會對訓練集進行有放回抽樣得到子訓練集,比較著名的取樣法為 0.632 自助法。每個基學習器基於不同子訓練集進行訓練,並綜合所有基學習器的預測值得到最終的預測結果。Bagging 常用的綜合方法是投票法,票數最多的類別為預測類別。
1.2 Boosting
Boosting 訓練過程為階梯狀,基模型的訓練是有順序的,每個基模型都會在前一個基模型學習的基礎上進行學習,最終綜合所有基模型的預測值產生最終的預測結果,用的比較多的綜合方式為加權法。
1.3 Stacking
Stacking 是先用全部資料訓練好基模型,然後每個基模型都對每個訓練樣本進行的預測,其預測值將作為訓練樣本的特徵值,最終會得到新的訓練樣本,然後基於新的訓練樣本進行訓練得到模型,然後得到最終預測結果。
那麼,為什麼整合學習會好於單個學習器呢?原因可能有三:
訓練樣本可能無法選擇出最好的單個學習器,由於沒法選擇出最好的學習器,所以乾脆結合起來一起用;
假設能找到最好的學習器,但由於演算法運算的限制無法找到最優解,只能找到次優解,採用整合學習可以彌補演算法的不足;
可能演算法無法得到最優解,而整合學習能夠得到近似解。比如說最優解是一條對角線,而單個決策樹得到的結果只能是平行於座標軸的,但是整合學習可以去擬合這條對角線。
偏差與方差
上節介紹了整合學習的基本概念,這節我們主要介紹下如何從偏差和方差的角度來理解整合學習。
2.1 整合學習的偏差與方差
偏差(Bias)描述的是預測值和真實值之差;方差(Variance)描述的是預測值作為隨機變數的離散程度。放一場很經典的圖:
模型的偏差與方差
偏差:描述樣本擬合出的模型的預測結果的期望與樣本真實結果的差距,要想偏差表現的好,就需要複雜化模型,增加模型的引數,但這樣容易過擬合,過擬合對應上圖的 High Variance,點會很分散。低偏差對應的點都打在靶心附近,所以喵的很準,但不一定很穩;
方差:描述樣本上訓練出來的模型在測試集上的表現,要想方差表現的好,需要簡化模型,減少模型的複雜度,但這樣容易欠擬合,欠擬合對應上圖 High Bias,點偏離中心。低方差對應就是點都打的很集中,但不一定是靶心附近,手很穩,但不一定瞄的準。
我們常說整合學習中的基模型是弱模型,通常來說弱模型是偏差高(在訓練集上準確度低)方差小(防止過擬合能力強)的模型。但是,並不是所有整合學習框架中的基模型都是弱模型。Bagging 和 Stacking 中的基模型為強模型(偏差低方差高),Boosting 中的基模型為弱模型。
在 Bagging 和 Boosting 框架中,通過計算基模型的期望和方差我們可以得到模型整體的期望和方差。為了簡化模型,我們假設基模型的權重 、方差 及兩兩間的相關係數 相等。由於 Bagging 和 Boosting 的基模型都是線性組成的,那麼有:
模型總體期望:
模型總體方差:
2.2 Bagging 的偏差與方差
對於 Bagging 來說,每個基模型的權重等於 1/m 且期望近似相等(子訓練集都是從原訓練集中進行子抽樣),故我們可以進一步化簡得到:
通過上式我們可以看到
整體模型的期望等於基模型的期望,這也就意味著整體模型的偏差和基模型的偏差近似。
整體模型的方差小於等於基模型的方差,當且僅當相關性為 1 時取等號,隨著基模型數量增多,整體模型的方差減少,從而防止過擬合的能力增強,模型的準確度得到提高。但是,模型的準確度一定會無限逼近於 1 嗎?並不一定,當基模型數增加到一定程度時,方差公式第一項的改變對整體方差的作用很小,防止過擬合的能力達到極限,這便是準確度的極限了。
在此我們知道了為什麼 Bagging 中的基模型一定要為強模型,如果 Bagging 使用弱模型則會導致整體模型的偏差提高,而準確度降低。
Random Forest 是經典的基於 Bagging 框架的模型,並在此基礎上通過引入特徵取樣和樣本取樣來降低基模型間的相關性,在公式中顯著降低方差公式中的第二項,略微升高第一項,從而使得整體降低模型整體方差。
2.3 Boosting 的偏差與方差
對於 Boosting 來說,基模型的訓練集抽樣是強相關的,那麼模型的相關係數近似等於 1,故我們也可以針對 Boosting 化簡公式為:
通過觀察整體方差的表示式我們容易發現:
整體模型的方差等於基模型的方差,如果基模型不是弱模型,其方差相對較大,這將導致整體模型的方差很大,即無法達到防止過擬合的效果。因此,Boosting 框架中的基模型必須為弱模型。
此外 Boosting 框架中採用基於貪心策略的前向加法,整體模型的期望由基模型的期望累加而成,所以隨著基模型數的增多,整體模型的期望值增加,整體模型的準確度提高。
基於 Boosting 框架的 Gradient Boosting Decision Tree 模型中基模型也為樹模型,同 Random Forrest,我們也可以對特徵進行隨機抽樣來使基模型間的相關性降低,從而達到減少方差的效果。
2.4 小結
我們可以使用模型的偏差和方差來近似描述模型的準確度;
對於 Bagging 來說,整體模型的偏差與基模型近似,而隨著模型的增加可以降低整體模型的方差,故其基模型需要為強模型;
對於 Boosting 來說,整體模型的方差近似等於基模型的方差,而整體模型的偏差由基模型累加而成,故基模型需要為弱模型。
Random Forest
Random Forest(隨機森林),用隨機的方式建立一個森林。RF 演算法由很多決策樹組成,每一棵決策樹之間沒有關聯。建立完森林後,當有新樣本進入時,每棵決策樹都會分別進行判斷,然後基於投票法給出分類結果。
3.1 思想
Random Forest(隨機森林)是 Bagging 的擴充套件變體,它在以決策樹為基學習器構建 Bagging 整合的基礎上,進一步在決策樹的訓練過程中引入了隨機特徵選擇,因此可以概括 RF 包括四個部分:
隨機選擇樣本(放回抽樣);
隨機選擇特徵;
構建決策樹;
隨機森林投票(平均)。
隨機選擇樣本和 Bagging 相同,採用的是 Bootstrap 自助取樣法;隨機選擇特徵是指在每個節點在分裂過程中都是隨機選擇特徵的(區別與每棵樹隨機選擇一批特徵)。
這種隨機性導致隨機森林的偏差會有稍微的增加(相比於單棵不隨機樹),但是由於隨機森林的“平均”特性,會使得它的方差減小,而且方差的減小補償了偏差的增大,因此總體而言是更好的模型。
隨機取樣由於引入了兩種取樣方法保證了隨機性,所以每棵樹都是最大可能的進行生長就算不剪枝也不會出現過擬合。
3.2 優缺點
優點
在資料集上表現良好,相對於其他演算法有較大的優勢
易於並行化,在大資料集上有很大的優勢;
能夠處理高維度資料,不用做特徵選擇。
AdaBoost
AdaBoost(Adaptive Boosting,自適應增強),其自適應在於:前一個基本分類器分錯的樣本會得到加強,加權後的全體樣本再次被用來訓練下一個基本分類器。同時,在每一輪中加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大迭代次數。
4.1 思想
Adaboost 迭代演算法有三步:
初始化訓練樣本的權值分佈,每個樣本具有相同權重;
訓練弱分類器,如果樣本分類正確,則在構造下一個訓練集中,它的權值就會被降低;反之提高。用更新過的樣本集去訓練下一個分類器;
將所有弱分類組合成強分類器,各個弱分類器的訓練過程結束後,加大分類誤差率小的弱分類器的權重,降低分類誤差率大的弱分類器的權重。
4.2 細節
4.2.1 損失函式
Adaboost 模型是加法模型,學習演算法為前向分步學習演算法,損失函式為指數函式的分類問題。
加法模型:最終的強分類器是由若干個弱分類器加權平均得到的。
前向分佈學習演算法:演算法是通過一輪輪的弱學習器學習,利用前一個弱學習器的結果來更新後一個弱學習器的訓練集權重。第 k 輪的強學習器為:
損失函式:
利用前向分佈學習演算法的關係可以得到損失函式為:
令
我們求 ,可以得到:
將 帶入損失函式,並對 \alpha 求導,使其等於 0,則就得到了:
其中, 即為我們前面的分類誤差率。
最後看樣本權重的更新。利用
這樣就得到了樣本權重更新公式。
4.2.2 正則化
為了防止 Adaboost 過擬合,我們通常也會加入正則化項,這個正則化項我們通常稱為步長(learning rate)。定義為 v,對於前面的弱學習器的迭代
加上正則化我們有:
v 的取值範圍為 0v1。對於同樣的訓練集學習效果,較小的 v 意味著我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定演算法的擬合效果。
4.3 優缺點
優點
分類精度高;
可以用各種迴歸分類模型來構建弱學習器,非常靈活;
不容易發生過擬合。
缺點
對異常點敏感,異常點會獲得較高權重。
GBDT
GBDT(Gradient Boosting Decision Tree)是一種迭代的決策樹演算法,該演算法由多棵決策樹組成,從名字中我們可以看出來它是屬於 Boosting 策略。GBDT 是被公認的泛化能力較強的演算法。
5.1 思想
GBDT 由三個概念組成:Regression Decision Tree(即 DT)、Gradient Boosting(即 GB),和SHringkage(一個重要演變)
5.1.1 迴歸樹(Regression Decision Tree)
如果認為 GBDT 由很多分類樹那就大錯特錯了(雖然調整後也可以分類)。對於分類樹而言,其值加減無意義(如性別),而對於迴歸樹而言,其值加減才是有意義的(如說年齡)。GBDT 的核心在於累加所有樹的結果作為最終結果,所以 GBDT 中的樹都是迴歸樹,不是分類樹,這一點相當重要。
迴歸樹在分枝時會窮舉每一個特徵的每個閾值以找到最好的分割點,衡量標準是最小化均方誤差。
5.1.2 梯度迭代(Gradient Boosting)
上面說到 GBDT 的核心在於累加所有樹的結果作為最終結果,GBDT 的每一棵樹都是以之前樹得到的殘差來更新目標值,這樣每一棵樹的值加起來即為 GBDT 的預測值。
模型的預測值可以表示為:
為基模型與其權重的乘積,模型的訓練目標是使預測值 逼近真實值 ,也就是說要讓每個基模型的預測值逼近各自要預測的部分真實值。由於要同時考慮所有基模型,導致了整體模型的訓練變成了一個非常複雜的問題。所以研究者們想到了一個貪心的解決手段:每次只訓練一個基模型。那麼,現在改寫整體模型為迭代式:
這樣一來,每一輪迭代中,只要集中解決一個基模型的訓練問題:使 F_i(x) 逼近真實值 y。
舉個例子:比如說 A 使用者年齡 20 歲,第一棵樹預測 12 歲,那麼殘差就是 8,第二棵樹用 8 來學習,假設其預測為 5,那麼其殘差即為 3,如此繼續學習即可。
那麼 Gradient 從何體現?其實很簡單,其殘差其實是最小均方損失函式關於預測值的反向梯度:
也就是說,若 加上擬合了反向梯度的 得到 ,該值可能將導致平方差損失函式降低,預測的準確度提高!
但要注意,基於殘差 GBDT 容易對異常值敏感,舉例:
很明顯後續的模型會對第 4 個值關注過多,這不是一種好的現象,所以一般迴歸類的損失函式會用絕對損失或者 Huber 損失函式來代替平方損失函式。
GBDT 的 Boosting 不同於 Adaboost 的 Boosting,GBDT 的每一步殘差計算其實變相地增大了被分錯樣本的權重,而對與分對樣本的權重趨於 0,這樣後面的樹就能專注於那些被分錯的樣本。
5.1.13 縮減(Shrinkage)
Shrinkage 的思想認為,每走一小步逐漸逼近結果的效果要比每次邁一大步很快逼近結果的方式更容易避免過擬合。即它並不是完全信任每一棵殘差樹。
Shrinkage 不直接用殘差修復誤差,而是隻修復一點點,把大步切成小步。本質上 Shrinkage 為每棵樹設定了一個 weight,累加時要乘以這個 weight,當 weight 降低時,基模型數會配合增大。
5.2 優缺點
優點
可以自動進行特徵組合,擬合非線性資料;
可以靈活處理各種型別的資料。
缺點
對異常點敏感。
5.3 與 Adaboost 的對比
相同:
都是 Boosting 家族成員,使用弱分類器;
都使用前向分佈演算法;
不同:
迭代思路不同:Adaboost 是通過提升錯分資料點的權重來彌補模型的不足(利用錯分樣本),而 GBDT 是通過算梯度來彌補模型的不足(利用殘差);
損失函式不同:AdaBoost 採用的是指數損失,GBDT 使用的是絕對損失或者 Huber 損失函式;
參考
機器學習演算法中 GBDT 與 Adaboost 的區別與聯絡是什麼? - Frankenstein 的回答 - 知乎
- END -
如果看到這裡,說明你喜歡這篇文章,請轉發、點贊。掃描下方二維碼或者微信搜尋「perfect_iscas」,新增好友後即可獲得10套程式設計師全棧課程+1000套PPT和簡歷模板,向我私聊「進群」二字即可進入高質量交流群。
↓掃描二維碼進群↓
喜歡文章,點個在看
相關文章
- 演算法金 | 決策樹、隨機森林、bagging、boosting、Adaboost、GBDT、XGBoost 演算法大全演算法隨機森林
- ML《決策樹(四)Bagging 和 Random Forest》randomREST
- 今日面試題分享:請問(決策樹、Random Forest、Booting、Adaboot)GBDT和XGBoost的區別是什麼?...面試題randomRESTboot
- 演算法金 | 突破最強演算法模型,決策樹演算法!!演算法模型
- 決策樹演算法演算法
- 機器學習演算法系列(二十)-梯度提升決策樹演算法(Gradient Boosted Decision Trees / GBDT)機器學習演算法梯度
- 決策樹模型(4)Cart演算法模型演算法
- 決策樹演算法-實戰篇演算法
- 決策樹演算法-理論篇演算法
- Reinventing the wheel:決策樹演算法的實現演算法
- 決策樹演算法的推理與實現演算法
- 分類演算法-決策樹 Decision Tree演算法
- 機器學習演算法系列(十八)-隨機森林演算法(Random Forest Algorithm)機器學習演算法隨機森林randomRESTGo
- 淺談樹模型與整合學習-從決策樹到GBDT模型
- 機器學習之決策樹演算法機器學習演算法
- Machine Learning(13)- Random ForestMacrandomREST
- 通俗易懂--決策樹演算法、隨機森林演算法講解(演算法+案例)演算法隨機森林
- 通俗地說決策樹演算法(二)例項解析演算法
- 機器學習經典演算法之決策樹機器學習演算法
- 關於決策樹演算法最通俗的一次Python學習教程,你肯定得看演算法Python
- 對梯度提升樹GBDT最通俗的介紹梯度
- Boosting提升演算法之AdaBoost演算法
- 通俗地說決策樹演算法(一)基礎概念介紹演算法
- GBDT 演算法:原理篇演算法
- 決策樹模型(3)決策樹的生成與剪枝模型
- 08_提升方法_AdaBoost演算法演算法
- 機器學習演算法:AdaBoost機器學習演算法
- 機器學習演算法系列(十七)-決策樹學習演算法(Decision Tree Learning Algorithm)機器學習演算法Go
- 鵝廠優文 | 決策樹及ID3演算法學習演算法
- 通用機器學習演算法:線性迴歸+決策樹+Xgboost機器學習演算法
- Segmentation of retinal OCT images using a random forest classifierSegmentationrandomREST
- 決策樹C4.5演算法的技術深度剖析、實戰解讀演算法
- 決策樹
- Python程式設計入門:接地氣的決策樹演算法基礎講解Python程式設計演算法
- 決策樹示例
- Bagging(Bootstrap aggregating)、隨機森林(random forests)、AdaBoostboot隨機森林randomREST
- 二叉樹的遍歷及常用演算法二叉樹演算法
- 【Python機器學習實戰】決策樹與整合學習(四)——整合學習(2)GBDTPython機器學習