集成學習算法總結----Boosting和Bagging


 

集成學習

基本思想:如果單個分類器表現的很好,那么為什么不適用多個分類器呢?

通過集成學習可以提高整體的泛化能力,但是這種提高是有條件的:

(1)分類器之間應該有差異性;

(2)每個分類器的精度必須大於0.5;

如果使用的分類器沒有差異,那么集成起來的分類結果是沒有變化的。如下圖所示,分類器的精度p<0.5,隨着集成規模的增加,分類精度不斷下降;如果精度大於p>0.5,那么最終分類精度可以趨向於1。

接下來需要解決的問題是如何獲取多個獨立的分類器呢?

我們首先想到的是用不同的機器學習算法訓練模型,比如決策樹、k-NN、神經網絡、梯度下降、貝葉斯等等,但是這些分類器並不是獨立的,它們會犯相同的錯誤,因為許多分類器是線性模型,它們最終的投票(voting)不會改進模型的預測結果。

既然不同的分類器不適用,那么可以嘗試將數據分成幾部分,每個部分的數據訓練一個模型。這樣做的優點是不容易出現過擬合,缺點是數據量不足導致訓練出來的模型泛化能力較差。

下面介紹兩種比較實用的方法Bagging和Boosting。

 

Bagging(Bootstrap Aggregating)算法

 

Bagging是通過組合隨機生成的訓練集而改進分類的集成算法。Bagging每次訓練數據時只使用訓練集中的某個子集作為當前訓練集(有放回隨機抽樣),每一個訓練樣本在某個訓練集中可以多次或不出現,經過T次訓練后,可得到T個不同的分類器。對一個測試樣例進行分類時,分別調用這T個分類器,得到T個分類結果。最后把這T個分類結果中出現次數多的類賦予測試樣例。這種抽樣的方法叫做bootstrap,就是利用有限的樣本資料經由多次重復抽樣,重新建立起足以代表原始樣本分布之新樣本。

Bagging算法基本步驟:

 
因為是隨機抽樣,那這樣的抽樣只有63%的樣本是原始數據集的。

Bagging的優勢在於當原始樣本中有噪聲數據時,通過bagging抽樣,那么就有1/3的噪聲樣本不會被訓練。對於受噪聲影響的分類器,bagging對模型是有幫助的。所以說bagging可以降低模型的方差,不容易受噪聲的影響,廣泛應用在不穩定的模型,或者傾向於過擬合的模型。

 

Boosting算法

Boosting算法指將弱學習算法組合成強學習算法,它的思想起源於Valiant提出的PAC(Probably Approximately Correct)學習模型。

基本思想:不同的訓練集是通過調整每個樣本對應的權重實現的,不同的權重對應不同的樣本分布,而這個權重為分類器不斷增加對錯分樣本的重視程度。

1. 首先賦予每個訓練樣本相同的初始化權重,在此訓練樣本分布下訓練出一個弱分類器;

2. 利用該弱分類器更新每個樣本的權重,分類錯誤的樣本認為是分類困難樣本,權重增加,反之權重降低,得到一個新的樣本分布;

3. 在新的樣本分布下,在訓練一個新的弱分類器,並且更新樣本權重,重復以上過程T次,得到T個弱分類器。

通過改變樣本分布,使得分類器聚集在那些很難分的樣本上,對那些容易錯分的數據加強學習,增加錯分數據的權重。這樣錯分的數據再下一輪的迭代就有更大的作用(對錯分數據進行懲罰)。對於這些權重,一方面可以使用它們作為抽樣分布,進行對數據的抽樣;另一方面,可以使用權值學習有利於高權重樣本的分類器,把一個弱分類器提升為一個強分類器。

弱分類器

Boosting處理過程

Boosting算法通過權重投票的方式將T個弱分類器組合成一個強分類器。只要弱分類器的分類精度高於50%,將其組合到強分類器里,會逐漸降低強分類器的分類誤差。

由於Boosting將注意力集中在難分的樣本上,使得它對訓練樣本的噪聲非常敏感,主要任務集中在噪聲樣本上,從而影響最終的分類性能。

對於Boosting來說,有兩個問題需要回答:一是在每一輪如何如何改變訓練數據的概率分布;二是如何將多個弱分類器組合成一個強分類器。而且存在一個重大的缺陷:該分類算法要求預先知道弱分類器識別准確率的下限。

 

AdaBoosting算法

針對上述Boosting存在的缺陷和問題,Freund和Schapire根據在線分配算法理論提出了AdaBoost算法,是一種改進的Boosting分類算法。

(1)提高那些被前幾輪弱分類器線性組成的分類器錯誤分類的的樣本的權值,這樣做能夠將每次訓練的焦點集中在比較難分的訓練樣本上;

(2)將弱分類器有機地集成起來,使用加權投票機制代替平均投票機制,從而使識別准確率較高的弱分類器具有較大的權重,使其在表決中起較大的作用,相反,識別准確率較低的分類器具有較小的權重,使其在表決中起較小的作用。

與Boosting分類算法相比,AdaBoost算法不需要預先獲得弱分類算法識別准確率的下限(弱分類器的誤差),只需關注於所有弱分類算法的分類精度(分類准確率略大於50%)。

 

AdaBoosting算法


訓練數據:

(x1, y1), …, (xm, ym),其中 xi∈X, yi∈Y={-1, +1}

 

Dt(i): 樣本xi在第t次迭代的權重,D1(i)=1/m

ht(X):弱分類器Ct訓練得到的判別函數,ht:X->{-1, +1}

εt:ht(X)的錯誤率,加權分類誤差(weighted error)

 

αt:分類器的系數,根據誤差計算,誤差越小,權重越大

上面權重Dt+1(i)的更新是基於前一步的權重Dt(i),而非局域全局更新。

 

AdaBoost分類算法是一種自適應提升的方法,由於訓練的過程是重復使用相同的訓練集,因而不要求數據集很大,其自身就可以組合任意數量的基分類器。在AdaBoost算法中,盡管不同的基分類器使用的訓練集稍有差異,但這種差異是隨機選擇造成的,所不同的是,這種差異是前一個基分類器的誤差函數。而提升的過程是針對一個特定問題的實際性能,顯然這就依賴於具體的數據和單個基分類器的性能。因此,訓練的過程需要有充足的訓練數據,並且基分類器應當是弱的但又不至於太弱(即分類准確率略大於50%),而提升的過程對噪聲和離群點的干擾尤為明顯。


Boosting與Bagging的不同之處:

1、Bagging的訓練集是隨機的,以獨立同分布選取的訓練樣本子集訓練弱分類器,而Boosting訓練集的選擇不是獨立的,每一次選擇的訓練集都依賴於上一次學習的結果,根據錯誤率取樣,因此Boosting的分類精度在大多數數據集中要優於Bagging,但是在有些數據集中,由於過擬合的原因,Boosting的精度會退化。
2、Bagging的每個預測函數(即弱假設)沒有權重,而Boosting根據每一次訓練的訓練誤差得到該次預測函數的權重;
3、Bagging的各個預測函數可以並行生成,而Boosting的只能順序生成。

4、Bagging是減少variance,而Boosting是減少bias。


參考資料:

Ensemble methods. Bagging and Boosting

Bagging, boosting and stacking in machine learning

HITSCIR-TM zkli-李澤魁 Bagging & Boosting

_______________________________

1、集成學習概述

1.1 集成學習概述

集成學習在機器學習算法中具有較高的准去率,不足之處就是模型的訓練過程可能比較復雜,效率不是很高。目前接觸較多的集成學習主要有2種:基於Boosting的和基於Bagging,前者的代表算法有Adaboost、GBDT、XGBOOST、后者的代表算法主要是隨機森林。

1.2 集成學習的主要思想 
集成學習的主要思想是利用一定的手段學習出多個分類器,而且這多個分類器要求是弱分類器,然后將多個分類器進行組合公共預測。核心思想就是如何訓練處多個弱分類器以及如何將這些弱分類器進行組合。

1.3、集成學習中弱分類器選擇 
一般采用弱分類器的原因在於將誤差進行均衡,因為一旦某個分類器太強了就會造成后面的結果受其影響太大,嚴重的會導致后面的分類器無法進行分類。常用的弱分類器可以采用誤差率小於0.5的,比如說邏輯回歸、SVM、神經網絡。

1.4、多個分類器的生成 
可以采用隨機選取數據進行分類器的訓練,也可以采用不斷的調整錯誤分類的訓練數據的權重生成新的分類器。

1.5、多個弱分類區如何組合 
基本分類器之間的整合方式,一般有簡單多數投票、權重投票,貝葉斯投票,基於D-S證據理論的整合,基於不同的特征子集的整合。

2、Boosting算法

2.1 基本概念

Boosting方法是一種用來提高弱分類算法准確度的方法,這種方法通過構造一個預測函數系列,然后以一定的方式將他們組合成一個預測函數。他是一種框架算法,主要是通過對樣本集的操作獲得樣本子集,然后用弱分類算法在樣本子集上訓練生成一系列的基分類器。他可以用來提高其他弱分類算法的識別率,也就是將其他的弱分類算法作為基分類算法放於Boosting 框架中,通過Boosting框架對訓練樣本集的操作,得到不同的訓練樣本子集,用該樣本子集去訓練生成基分類器;每得到一個樣本集就用該基分類算法在該樣本集上產生一個基分類器,這樣在給定訓練輪數 n 后,就可產生 n 個基分類器,然后Boosting框架算法將這 n個基分類器進行加權融合,產生一個最后的結果分類器,在這 n個基分類器中,每個單個的分類器的識別率不一定很高,但他們聯合后的結果有很高的識別率,這樣便提高了該弱分類算法的識別率。在產生單個的基分類器時可用相同的分類算法,也可用不同的分類算法,這些算法一般是不穩定的弱分類算法,如神經網絡(BP) ,決策樹(C4.5)等。

2.2、Adaboost

Adaboost是boosting中較為代表的算法,基本思想是通過訓練數據的分布構造一個分類器,然后通過誤差率求出這個若弱分類器的權重,通過更新訓練數據的分布,迭代進行,直到達到迭代次數或者損失函數小於某一閾值。

Adaboost的算法流程: 
假設訓練數據集為T={(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4),(X5,Y5)} 其中Yi={-1,1}

1、初始化訓練數據的分布 
訓練數據的權重分布為D={W11,W12,W13,W14,W15},其中W1i=1/N。即平均分配。

2、選擇基本分類器 
這里選擇最簡單的線性分類器y=aX+b ,分類器選定之后,最小化分類誤差可以求得參數。

3、計算分類器的系數和更新數據權重 
誤差率也可以求出來為e1.同時可以求出這個分類器的系數。基本的Adaboost給出的系數計算公式為1/2 
然后更新訓練數據的權重分布, 
(圖片來自李航的統計學習方法) 
這里寫圖片描述

4、分類器的組合

這里寫圖片描述 
當然這種組合方式基於分類器的系數的,而分類器的系數又是根據誤差率求出來的,所以Adaboots最后影響的就是如何使用誤差率,以及訓練數據更新權重的的計算系數。

5、Adaboost的一些問題

Adaboost中涉及到一些可以進行調整的參數和計算公式的選擇主要有以下幾點:

**弱分類器如何選擇 
**如何更好的實驗誤差率計算分類器的系數 
**如何更好的計算訓練數據的權重的分布 
**弱分類器如何進行組合 
**迭代次數 
**損失函數的閾值選取多少

3、Bagging算法

bagging方法bootstrap aggregating的縮寫,采用的是隨機有放回的選擇訓練數據然后構造分類器,最后組合。這里以隨機森林為例進行講解。 
隨機森林算法概述

隨機森林算法是上世紀八十年代Breiman等人提出來的,其基本思想就是構造很多棵決策樹,形成一個森林,然后用這些決策樹共同決策輸出類別是什么。隨機森林算法及在構建單一決策樹的基礎上的,同時是單一決策樹算法的延伸和改進。在整個隨機森林算法的過程中,有兩個隨機過程,第一個就是輸入數據是隨機的從整體的訓練數據中選取一部分作為一棵決策樹的構建,而且是有放回的選取;第二個就是每棵決策樹的構建所需的特征是從整體的特征集隨機的選取的,這兩個隨機過程使得隨機森林很大程度上避免了過擬合現象的出現。

隨機森林算法具體的過程:

1、從訓練數據中選取n個數據作為訓練數據輸入,一般情況下n是遠小於整體的訓練數據N的,這樣就會造成有一部分數據是無法被去到的,這部分數據稱為袋外數據,可以使用袋外數據做誤差估計。

2、選取了輸入的訓練數據的之后,需要構建決策樹,具體方法是每一個分裂結點從整體的特征集M中選取m個特征構建,一般情況下m遠小於M。

3、在構造每棵決策樹的過程中,按照選取最小的基尼指數進行分裂節點的選取進行決策樹的構建。決策樹的其他結點都采取相同的分裂規則進行構建,直到該節點的所有訓練樣例都屬於同一類或者達到樹的最大深度。

4、 重復第2步和第3步多次,每一次輸入數據對應一顆決策樹,這樣就得到了隨機森林,可以用來對預測數據進行決策。

5、 輸入的訓練數據選擇好了,多棵決策樹也構建好了,對待預測數據進行預測,比如說輸入一個待預測數據,然后多棵決策樹同時進行決策,最后采用多數投票的方式進行類別的決策。

隨機森林算法圖示

這里寫圖片描述

隨機森林算法的注意點:

1、 在構建決策樹的過程中是不需要剪枝的。 
2、 整個森林的樹的數量和每棵樹的特征需要人為進行設定。 
3、 構建決策樹的時候分裂節點的選擇是依據最小基尼系數的。

隨機森林有很多的優點:

a. 在數據集上表現良好,兩個隨機性的引入,使得隨機森林不容易陷入過擬合。

b. 在當前的很多數據集上,相對其他算法有着很大的優勢,兩個隨機性的引入,使得隨機森林具有很好的抗噪聲能力。

c. 它能夠處理很高維度(feature很多)的數據,並且不用做特征選擇,對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據,數據集無需規范化。

d. 在創建隨機森林的時候,對generlization error使用的是無偏估計。

e. 訓練速度快,可以得到變量重要性排序。

f. 在訓練過程中,能夠檢測到feature間的互相影響。

g 容易做成並行化方法。

h. 實現比較簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM