決策樹(中)-集成學習、RF、AdaBoost、Boost Tree、GBDT

參考資料(要是對於本文的理解不夠透徹,必須將如下博客認知閱讀):面試

1. https://zhuanlan.zhihu.com/p/86263786算法

2.https://blog.csdn.net/liuy9803/article/details/80598652bootstrap

3.http://www.javashuo.com/article/p-tozojgjb-gh.html框架

4.GBDT算法原理以及實例理解(!!)dom

5.Adaboost算法原理分析和實例+代碼(簡明易懂)(!!)機器學習

 

目錄

1.集成學習概念函數

2.Bagging性能

3.Random Forest(RF)學習

4.Boosting測試

5.Adaboost

6.Boosting tree(提高樹)

7.GBDT

8.從誤差和方差的角度理解集成學習


 

1、集成學習相關知識(Ensemble learning)

1. 集成學習(Ensemble learning)是使用一系列學習器進行學習,並使用某種規則把各個學習結果進行整合,從而得到比單個學習器顯著優越的泛化性能。它不是一種單獨的機器學習算法,而更像是一種優化策略,其目的在於使得集成模型達到減少方差(bagging)減少誤差(boosting)改進預測(stacking)的效果。

2. 根據集成學習的概念以及通常結構,咱們能都發現集成學習的兩個核心問題

  • 如何選擇若干個體學習器?怎麼訓練每一個算法?
  • 選擇何種策略將這些個體學習器集成爲一個強學習器?

2. 集成學習的通常結構是,先產生一組個體學習器,再用某種結合策略將它們結合起來。

         

         

3. 集成學習的成功在於保證個體學習器的多樣性(好而不一樣),且集成不穩定的算法也可以獲得一個比較明顯的性能提高。

4. 根據個體學習器的生成方式,目前的集成學習方法大體能夠分爲兩類:(也有人把集成學習方法分爲3類[Bagging、Boosting、stacking],stacking其實能夠當作是一種集成學習方法,也能夠當作是一種特殊的結合策略)

  • 個體學習器間存在強依賴關係、必須串行生成的序列化方法,表明爲Boosting;
  • 個體學習器間不存在強依賴關係、可同時生成的並行化方法,表明爲Bagging和隨機森林。

5. 集成學習優點在於:

  • 個體學習器之間存在必定的差別性,這會致使分類邊界不一樣,也就是說可能存在錯誤。那麼將多個個體學習器合併後,就能夠獲得更加合理的邊界,減小總體的錯誤率,實現更好的效果;
  • 對於數據集過大或太小的狀況,能夠分別進行劃分和有放回的操做,產生不一樣的數據子集,而後使用數據子集訓練不一樣的學習器,最終再合併成爲一個強學習器;
  • 若是數據的劃分邊界過於複雜,使用線性模型很難描述狀況,那麼能夠訓練多個模型,而後再進行模型的融合;
  • 對於多個異構的特徵集的時候,很難直接融合,那麼能夠考慮使用每一個數據集構建一個分類模型,而後將多個模型融合。

 

2、Bagging(裝袋)

1.概念

  • Bagging 是一種個體學習器之間不存在強依賴關係可同時生成並行式集成學習方法。
  • Bagging 基於自助採樣法(bootstrap sampling),也叫有放回重採樣法.即給定包含m個樣本的數據集,先隨機從樣本中取出一個樣本放入採樣集中,再把該樣本返回初始數據集,使得下次採樣時該樣本仍能夠被選中,這樣,通過m次隨機採樣操做,就能夠獲得包含m個樣本的採樣集,初始數據集中有的樣本屢次出現,有的則未出現。其中,初始訓練集中約有63.2%的樣本出如今採樣集中。
  • 爲了使基學習器儘量的具備較大的差別(好而不一樣,保持多樣性),對訓練樣本進行採樣以產生若干個不一樣的子集,對每個子集訓練一個基學習器,而後結合策略進行集成的方法。爲了避免讓每一個基學習器效果太差,這些子集不能徹底不一樣,所以使用子集之間相互有交疊的採樣方法,即bootstrap方法(自助採樣法)。
自助採樣法:對 m 個樣本的訓練集,有放回的採樣 m 次;此時,樣本在 m 次採樣中始終沒被採樣的機率約爲 0.368,即每次自助採樣只能採樣到所有樣本的 63% 左右。

 在這裏插入圖片描述

2.流程圖

3.算法流程

(1)給定包含m個樣本的數據集,隨機取出一個樣本放入採樣集中,再把它放回到原始數據集中,重複m次,獲得含m個樣本的採樣集。

(2)進行一樣的操做進行T次獲得T個每一個含m個樣本的採樣集,基於每一個採樣集訓練一個基學習器。

(3)再將基學習器進行組合,通常使用多數投票或求均值的方式來統計最終的分類結果。

4.Bagging的優勢

  • 訓練一個 Bagging集成與直接使用基分類器算法訓練一個學習器的複雜度同階,說明Bagging是一個高效的集成學習算法。
  • 此外,與標準的AdaBoost算法只適用於二分類問題不一樣,Bagging能不通過修改用於多分類、迴歸等任務。
  • 因爲每一個基學習器只使用63.2%的數據,因此剩下36.8%的數據能夠用來作驗證集來對泛化性能進行「包外估計」。
  • 從誤差-方差的角度來講,Boosting主要關注減少誤差而Bagging主要關注下降方差,也就說明boosting在弱學習器上表現更好,而下降方差能夠減少過擬合的風險,因此Bagging一般在強分類和複雜模型上表現得很好。(這可否說明Bagging的基學習器選取強學習器效果會更好呢??)

3、Random Forest(RF)(隨機森林=Bagging+決策樹)

1.概念

  • 隨機森林是bagging的擴展體。
  • RF在以決策樹爲基學習器,經過Bagging自助採樣算法採樣訓練樣本,進一步在決策樹的訓練過程當中引入了隨機屬性選擇。(爲了保證多樣性)
  • 具體地,傳統決策樹在選擇劃分屬性時是在當前結點的屬性集合(假定有d個屬性)中選擇一個最優屬性,而在RF上,對基決策樹的每一個結點,先從該結點的屬性集中隨機選擇其中的k個屬性組成屬性集,而後從該屬性集中選擇最優的劃分屬性,通常狀況下,推薦

2.隨機森林隨機的意義表如今哪?

  • 隨機森林中隨機主要體如今對樣本的隨機採樣以及引入了隨機屬性選擇。
  • 無論是對樣本的隨機採樣,仍是對特徵的抽樣,甚至對切分點的隨機劃分,都是爲了引入誤差,使基分類器之間具備明顯的差別,相互獨立,提高模型的多樣性,使模型不會受到局部樣本的影響,從而減小方差,提高模型的泛化能力。

3.隨機森林的優缺點

  • 可以處理很高維度的數據,而且不用作特徵選擇;處理高維數據,處理特徵遺失數據,處理不平衡數據是隨機森林的長處。
  • 隨機森林可用於迴歸問題和分類問題,取決於隨機森林的每顆cart樹是分類樹仍是迴歸樹。;
  • 容易作成並行化方法,速度快;
  • 能夠進行可視化展現,便於分析。
  • 當數據噪聲比較大時,會產生過擬合現象;
  • 當隨機森林中的決策樹個數不少時,訓練時須要的空間和時間會比較大
  • 隨機森林中還有許多很差解釋的地方,有點算是黑盒模型

4.隨機森林與Bagging算法的比較

  • 二者的收斂性類似,但RF的起始性能相對較差,特別只有一個基學習器時。隨着基學習器數量的增長,隨機森林一般會收斂到更低的泛化偏差。
  • 隨機森林的訓練效率常優於Bagging,由於Bagging是「肯定型」決策樹,而隨機森林使用「隨機型」決策樹。

 

4、Boosting(提高)

1.概念

(1)Boosting是一簇可將弱學習器提高爲強學習器的算法,其基於串行策略:基學習器之間存在依賴關係,新的學習器須要根據上一個學習器生成,每次學習都會使用所有訓練樣本。

(2)其工做機制爲:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對樣本分佈進行調整,使得先前的基學習器作錯的訓練樣本在後續收到更多的關注,而後基於調整後的樣本分佈來訓練下一個基學習器;如此重複進行,直至基學習器數目達到實現指定的值T,或整個集成結果達到退出條件,而後將這些學習器進行加權結合。正確率越高的基學習器的得到的權重越大。Boosting能夠用於分類和迴歸問題。

(3)常見的基於Boosting模型的算法有:AdaBoost、Boosting Tree、GBDT、XGBoost。

2.流程圖

 

3.Boosting的特色

(1)從方差-誤差分解的角度看,Boosting主要關注下降誤差,所以Boosting能基於泛化性能至關弱的學習器構建出很強的集成。

(2)Boosting對樣本分佈進行調整主要有兩種方法:

  • 從新賦權法(re-weighting):在每一輪學習中,根據樣本分佈爲每一個訓練樣本從新賦予一個權重值。
  • 重採樣法(re-sampling):對於沒法接受帶權樣本的基學習算法,在每一輪學習中,根據樣本分佈對訓練集從新進行採樣,再用重採樣獲得的樣本集對基學習器進行訓練。

4.Bagging和Boosting的區別

(1) 樣本選擇上:

Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。

Boosting:每一輪的訓練集不變,只是訓練集中每一個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。

(2) 樣例權重:

Bagging:使用均勻取樣,每一個樣例的權重相等

Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。

(3) 預測函數:

Bagging:全部預測函數的權重相等。

Boosting:每一個弱分類器都有相應的權重,對於分類偏差小的分類器會有更大的權重。

(4) 並行計算:

Bagging:各個預測函數能夠並行生成

Boosting:各個預測函數只能順序生成,由於後一個模型參數須要前一輪模型的結果。

(5) 爲何說bagging是減小variance,而boosting是減小bias(高頻面試)

Bagging中每一個基學習器都是強學習器,主要關注的問題是下降方差;Boosting中每一個基學習器都是弱學習器,主要關注的問題是下降誤差。具體解答分析見7.從誤差和方差的角度理解集成學習

5、AdaBoost(只對AdaBoost作了簡單的推導,具體推導細節請看統計學習方法)

1.概念

(1)AdaBoost [ adaptive boosting(自適應boosting) ] 是Boosting中的經典算法,其主要應用於二分類問題,也能夠用於多分類以及迴歸問題。

(2)AdaBoost算法思路:如何改變每一輪訓練數據的權重?Adaboost 算法採用調整樣本權重的方式來對樣本分佈進行調整,即提升前一輪個體學習器錯誤分類的樣本的權重,而下降那些正確分類的樣本的權重,這樣就能使得錯誤分類的樣本能夠受到更多的關注,從而在下一輪中能夠正確分類,使得分類問題被一系列的弱分類器「分而治之」。如何將弱分類器組合成一個強分類器?對於組合方式,AdaBoost採用加權多數表決的方法,具體地,加大分類偏差率小的若分類器的權值,減少分類偏差率大的若分類器的權值,從而調整他們在表決中的做用。

2.算法流程(摘自西瓜書與統計學習方法)


 

3.結合一個例子來理解整個算法的流程,這個例子摘自李航《統計學習方法》:

 4.AdaBoost算法的理解

AdaBoost算法是模型爲加法模型損失函數爲指數函數學習算法爲前向分步算法的二分類算法。AdaBoost算法中最重要的應該就是樣本權重更新公式的推導。

加法模型:最終的強分類器是由若干個弱分類器加權平均獲得的。

前向分佈學習算法:算法是經過一輪輪的弱學習器學習,利用前一個弱學習器的結果來更新後一個弱學習器的訓練集權重。第 k 輪的強學習器爲:

[公式]

定義損失函數爲 n 個樣本的指數損失函數:

[公式]

利用前向分佈學習算法的關係能夠獲得:

[公式]

由於 [公式] 已知,因此令 [公式] ,隨着每一輪迭代而將這個式子帶入損失函數,損失函數轉化爲:

[公式]

咱們求 [公式] ,能夠獲得:

[公式]

將 [公式] 帶入損失函數,並對 [公式] 求導,使其等於 0,則就獲得了:

[公式]

其中, [公式] 即爲咱們前面的分類偏差率。

[公式]

最後看樣本權重的更新。利用 [公式] 和 [公式] ,便可得:

[公式]

這樣就獲得了樣本權重更新公式。

5.AdaBoost優缺點

  • 分類精度高;
  • 能夠用各類迴歸分類模型來構建弱學習器,很是靈活;
  • 不容易發生過擬合。
  • 對異常點敏感,異常點會得到較高權重。

 

6、Boosting tree(提高樹)(年齡例子)

1.概念

  • 提高樹是以分類樹或迴歸樹爲基本分類器的提高方法。Boosting Tree被認爲是統計學習中性能最好的方法之一。
  • 提高方法採用加法模型(即基函數的線性組合)前向分步算法以決策樹爲基函數的提高方法稱爲提高樹(boosting tree)。
  • 對於分類問題決策樹是二叉分類樹,對迴歸問題決策樹是二叉迴歸樹。
  • 從某種角度能夠理解爲Boosting tree = Adaboost + tree

2.提高樹模型表示

 

 其中,T(x;\Theta _m)表示決策樹;\Theta _m爲決策樹的參數;M爲決策樹的個數。

3.多種類型提高樹算法

提高樹對不一樣問題有不一樣的提高樹學習算法,其主要區別在於使用的損失函數不一樣。

(1)用平方偏差損失函數的迴歸問題。

(2)用指數損失函數的分類問題。

(3)通常損失函數的通常決策問題。(引出了GB[Gradient Boosting 梯度提高]算法,GB+決策樹(迴歸樹)就獲得了GBDT)

4.用於分類問題的提高樹

對於二分類問題,Boosting Tree算法只須要將AdaBoost算法中的基分類器限制爲CART二分類樹便可。

從這個角度能夠反應出,在二分類問題中 Boosting Tree =  AdaBoost + Tree(二分類樹)

5.用於迴歸問題的提高樹(推導過程,詳細過程見統計學習方法)

(1)把輸入空間X劃分爲J個互不相交的區域,而且在每一個區域上肯定的輸出常量,那麼樹能夠表示爲以下:

                                             

其中,參數表示樹的區域劃分和各個區域上的常數。J是迴歸樹的複雜度即葉子結點個數。                                           

(2)迴歸問題提高樹使用如下前向分佈算法:

                                           f_0(x)=0

                                           

                                                                           

在第m步,給定當前模型,須要求解

                                     

獲得,即第m棵樹的參數。

(3)由於爲迴歸問題,因此採用平方偏差損失函數,因此

                          

由上式容易知道,爲使損失函數最小,則須要

                                                         

即須要擬合r,其中,

                                                         

當前模型擬合數據的殘差(residual),因此對於迴歸問題的提高樹算法來講,只須要簡單的擬合當前模型的殘差。


 算法流程以下圖所示:(摘自統計學習方法)

 

 

 

 李航的《統計學習方法》中也給出了相應的例子來講明整個解決迴歸問題提高樹的算法流程。因爲題目太長,在這我就不粘貼出來了,有須要本身去看!

 7、GBDT

GBDT = GB + DT + Shringkage(一個重要演變),在瞭解GBDT以前,首先讓我瞭解一下GB(Gradient Boosting,梯度提高)算法以及DT(Decision Tree)。

1.DT(Decision Tree)

  • 首先,GBDT使用的決策樹是CART迴歸樹不管是處理迴歸問題仍是二分類以及多分類,GBDT使用的決策樹統統都是都是CART迴歸樹。爲何不用CART分類樹呢?由於GBDT每次迭代要擬合的是梯度值,是連續值因此要用迴歸樹。
  • 對於迴歸樹算法來講最重要的是尋找最佳的劃分點,那麼迴歸樹中的可劃分點包含了全部特徵的全部可取的值。在分類樹中最佳劃分點的判別標準是熵或者基尼係數,都是用純度來衡量的,可是在迴歸樹中的樣本標籤是連續數值,因此再使用熵之類的指標再也不合適,取而代之的是平方偏差,它能很好的評判擬合程度

Cart迴歸樹生成算法(用於迴歸問題的Boosting Tree也須要用到Cart迴歸樹生成算法)(有關Cart迴歸樹以及分類樹的詳細知識可查看博主的上一篇博客)

 2.GB(Gradient Boosting)

梯度提高樹(Grandient Boosting)是提高樹(Boosting Tree)的一種改進算法。

提高樹利用加法模型與前向分步算法實現學習的優化過程,當損失函數是平方損失和指數損失函數時,梯度提高樹每一步優化是很簡單的,可是對於通常損失函數而言,每每每一步優化起來不那麼容易,針對這一問題,Friedman提出了梯度提高樹算法,這是利用最速降低的近似方法,其關鍵是利用損失函數的負梯度做爲提高樹算法中的殘差的近似值。那麼負梯度長什麼樣呢?第t輪的第i個樣本的損失函數的負梯度爲:

此時不一樣的損失函數將會獲得不一樣的負梯度,若是選擇平方損失

 

則負梯度爲

 從上述推導過程當中,能夠看出當損失函數爲平方損失函數時,損失函數的負梯度 = 殘差。可是在GBDT中,損失函數通常不會選擇平方損失函數,因此咱們利用損失函數的負梯度做爲提高樹算法中的殘差的近似值。

3.GBDT算法

介紹完了GB和DT,將二者結合起來就獲得GBDT算法。GBDT(Gradient Boosting Decision Tree)是一種迭代的決策樹算法,該算法由多棵決策樹組成,從名字中咱們能夠看出來它是屬於 Boosting 策略。GBDT 是被公認的泛化能力較強的算法。

首先必須明確一點 ,GBDT 使用的是絕對損失或者 Huber 損失函數,而不是平方損失函數(網上不少博客把GBDT的損失函數看成平方損失函數,這是錯誤的)

GBDT算法的整個流程:

 

一般在2(d)步驟時,GBDT會引入縮減(Shrinkage)思想

Shrinkage 的思想認爲,每走一小步逐漸逼近結果的效果要比每次邁一大步很快逼近結果的方式更容易避免過擬合。即它並非徹底信任每一棵殘差樹。

[公式]

Shrinkage 不直接用殘差修復偏差,而是隻修復一點點,把大步切成小步。本質上 Shrinkage 爲每棵樹設置了一個 weight,累加時要乘以這個 weight,當 weight 下降時,基模型數會配合增大。

4.如何使用GBDT解決二分類問題?

在梯度提高決策樹GBDT中,經過定義不一樣的損失函數,能夠完成不一樣的學習任務,二分類是機器學習中一類比較重要的分類算法,對於分類問題,通常將損失函數改成指數損失(二分類)或者對數似然損失(多分類)。在二分類中,其損失函數爲:

其他過程見:深刻理解GBDT二分類算法(此篇博客的博主是個大牛!@!!!!!!!)

 

5.與Adaboost的對比

相同點

  • 都是 Boosting 家族成員,使用弱分類器;
  • 都使用前向分佈算法;

不一樣點:

  • 迭代思路不一樣:Adaboost 是經過提高錯分數據點的權重來彌補模型的不足(利用錯分樣本),而 GBDT 是經過算梯度來彌補模型的不足(利用殘差);
  • 損失函數不一樣:AdaBoost 採用的是指數損失,GBDT 使用的是絕對損失或者 Huber 損失函數;

6.與Boosting Tree(提高樹)的卻別

  • 在擬合值方面,GBDT用負梯度代替了BT中的殘差,其本質是用泰勒一階展開式近似值。
  • BT中,葉子節點的輸出取平均值(由CART迴歸樹的創建過程決定);而GBDT葉子節點的輸出須要擬合損失函數最好的輸出。

8、從誤差和方差的角度理解集成學習

8.1 集成學習的誤差與方差

誤差(Bias)描述的是預測值和真實值之差;方差(Variance)描述的是預測值做爲隨機變量的離散程度。放一場很經典的圖:

模型的誤差與方差

  • 誤差:描述樣本擬合出的模型的預測結果的指望與樣本真實結果的差距,要想誤差表現的好,就須要複雜化模型,增長模型的參數,但這樣容易過擬合,過擬合對應上圖的 High Variance,點會很分散。低誤差對應的點都打在靶心附近,因此喵的很準,但不必定很穩;
  • 方差:描述樣本上訓練出來的模型在測試集上的表現,要想方差表現的好,須要簡化模型,減小模型的複雜度,但這樣容易欠擬合,欠擬合對應上圖 High Bias,點偏離中心。低方差對應就是點都打的很集中,但不必定是靶心附近,手很穩,但不必定瞄的準。

咱們常說集成學習中的基模型是弱模型,一般來講弱模型是誤差高(在訓練集上準確度低)方差小(防止過擬合能力強)的模型,但並非全部集成學習框架中的基模型都是弱模型。Bagging 和 Stacking 中的基模型爲強模型(誤差低,方差高),而Boosting 中的基模型爲弱模型(誤差高,方差低)。

在 Bagging 和 Boosting 框架中,經過計算基模型的指望和方差咱們能夠獲得模型總體的指望和方差。爲了簡化模型,咱們假設基模型的指望爲 [公式] ,方差 [公式] ,模型的權重爲 [公式] ,兩兩模型間的相關係數 [公式] 相等。因爲 Bagging 和 Boosting 的基模型都是線性組成的,那麼有:

模型整體指望:
[公式]

模型整體方差(公式推導參考協方差的性質,協方差與方差的關係):

[公式]

模型的準確度可由誤差和方差共同決定:

[公式]

8.2 Bagging 的誤差與方差

對於 Bagging 來講,每一個基模型的權重等於 1/m 且指望近似相等,故咱們能夠獲得:

[公式]

經過上式咱們能夠看到:

  • 總體模型的指望等於基模型的指望,這也就意味着總體模型的誤差和基模型的誤差近似。
  • 總體模型的方差小於等於基模型的方差,當且僅當相關性爲 1 時取等號,隨着基模型數量增多,總體模型的方差減小,從而防止過擬合的能力加強,模型的準確度獲得提升。可是,模型的準確度必定會無限逼近於 1 嗎?並不必定,當基模型數增長到必定程度時,方差公式第一項的改變對總體方差的做用很小,防止過擬合的能力達到極限,這即是準確度的極限了。

在此咱們知道了爲何 Bagging 中的基模型必定要爲強模型,若是 Bagging 使用弱模型則會致使總體模型的誤差提升,而準確度下降。

Random Forest 是經典的基於 Bagging 框架的模型,並在此基礎上經過引入特徵採樣和樣本採樣來下降基模型間的相關性,在公式中顯著下降方差公式中的第二項,略微升高第一項,從而使得總體下降模型總體方差。

8.3 Boosting 的誤差與方差

對於 Boosting 來講,因爲基模型共用同一套訓練集,因此基模型間具備強相關性,故模型間的相關係數近似等於 1,針對 Boosting 化簡公式爲:

[公式]

經過觀察總體方差的表達式咱們容易發現:

  • 總體模型的方差等於基模型的方差,若是基模型不是弱模型,其方差相對較大,這將致使總體模型的方差很大,即沒法達到防止過擬合的效果。所以,Boosting 框架中的基模型必須爲弱模型。
  • 此外 Boosting 框架中採用基於貪心策略的前向加法,總體模型的指望由基模型的指望累加而成,因此隨着基模型數的增多,總體模型的指望值增長,總體模型的準確度提升。

基於 Boosting 框架的 Gradient Boosting Decision Tree 模型中基模型也爲樹模型,同 Random Forrest,咱們也能夠對特徵進行隨機抽樣來使基模型間的相關性下降,從而達到減小方差的效果。

相關文章
相關標籤/搜索