集成学习算法总结----Boosting和Bagging
集成學(xué)習(xí)
基本思想:如果單個(gè)分類器表現(xiàn)的很好,那么為什么不適用多個(gè)分類器呢?
通過集成學(xué)習(xí)可以提高整體的泛化能力,但是這種提高是有條件的:
(1)分類器之間應(yīng)該有差異性;
(2)每個(gè)分類器的精度必須大于0.5;
如果使用的分類器沒有差異,那么集成起來(lái)的分類結(jié)果是沒有變化的。如下圖所示,分類器的精度p<0.5,隨著集成規(guī)模的增加,分類精度不斷下降;如果精度大于p>0.5,那么最終分類精度可以趨向于1。
接下來(lái)需要解決的問題是如何獲取多個(gè)獨(dú)立的分類器呢?
我們首先想到的是用不同的機(jī)器學(xué)習(xí)算法訓(xùn)練模型,比如決策樹、k-NN、神經(jīng)網(wǎng)絡(luò)、梯度下降、貝葉斯等等,但是這些分類器并不是獨(dú)立的,它們會(huì)犯相同的錯(cuò)誤,因?yàn)樵S多分類器是線性模型,它們最終的投票(voting)不會(huì)改進(jìn)模型的預(yù)測(cè)結(jié)果。
既然不同的分類器不適用,那么可以嘗試將數(shù)據(jù)分成幾部分,每個(gè)部分的數(shù)據(jù)訓(xùn)練一個(gè)模型。這樣做的優(yōu)點(diǎn)是不容易出現(xiàn)過擬合,缺點(diǎn)是數(shù)據(jù)量不足導(dǎo)致訓(xùn)練出來(lái)的模型泛化能力較差。
下面介紹兩種比較實(shí)用的方法Bagging和Boosting。
?
Bagging(Bootstrap Aggregating)算法
?
Bagging是通過組合隨機(jī)生成的訓(xùn)練集而改進(jìn)分類的集成算法。Bagging每次訓(xùn)練數(shù)據(jù)時(shí)只使用訓(xùn)練集中的某個(gè)子集作為當(dāng)前訓(xùn)練集(有放回隨機(jī)抽樣),每一個(gè)訓(xùn)練樣本在某個(gè)訓(xùn)練集中可以多次或不出現(xiàn),經(jīng)過T次訓(xùn)練后,可得到T個(gè)不同的分類器。對(duì)一個(gè)測(cè)試樣例進(jìn)行分類時(shí),分別調(diào)用這T個(gè)分類器,得到T個(gè)分類結(jié)果。最后把這T個(gè)分類結(jié)果中出現(xiàn)次數(shù)多的類賦予測(cè)試樣例。這種抽樣的方法叫做bootstrap,就是利用有限的樣本資料經(jīng)由多次重復(fù)抽樣,重新建立起足以代表原始樣本分布之新樣本。
Bagging算法基本步驟:
因?yàn)槭请S機(jī)抽樣,那這樣的抽樣只有63%的樣本是原始數(shù)據(jù)集的。Bagging的優(yōu)勢(shì)在于當(dāng)原始樣本中有噪聲數(shù)據(jù)時(shí),通過bagging抽樣,那么就有1/3的噪聲樣本不會(huì)被訓(xùn)練。對(duì)于受噪聲影響的分類器,bagging對(duì)模型是有幫助的。所以說bagging可以降低模型的方差,不容易受噪聲的影響,廣泛應(yīng)用在不穩(wěn)定的模型,或者傾向于過擬合的模型。
?
Boosting算法
Boosting算法指將弱學(xué)習(xí)算法組合成強(qiáng)學(xué)習(xí)算法,它的思想起源于Valiant提出的PAC(Probably Approximately Correct)學(xué)習(xí)模型。
基本思想:不同的訓(xùn)練集是通過調(diào)整每個(gè)樣本對(duì)應(yīng)的權(quán)重實(shí)現(xiàn)的,不同的權(quán)重對(duì)應(yīng)不同的樣本分布,而這個(gè)權(quán)重為分類器不斷增加對(duì)錯(cuò)分樣本的重視程度。1. 首先賦予每個(gè)訓(xùn)練樣本相同的初始化權(quán)重,在此訓(xùn)練樣本分布下訓(xùn)練出一個(gè)弱分類器;
2. 利用該弱分類器更新每個(gè)樣本的權(quán)重,分類錯(cuò)誤的樣本認(rèn)為是分類困難樣本,權(quán)重增加,反之權(quán)重降低,得到一個(gè)新的樣本分布;
3. 在新的樣本分布下,在訓(xùn)練一個(gè)新的弱分類器,并且更新樣本權(quán)重,重復(fù)以上過程T次,得到T個(gè)弱分類器。
通過改變樣本分布,使得分類器聚集在那些很難分的樣本上,對(duì)那些容易錯(cuò)分的數(shù)據(jù)加強(qiáng)學(xué)習(xí),增加錯(cuò)分?jǐn)?shù)據(jù)的權(quán)重。這樣錯(cuò)分的數(shù)據(jù)再下一輪的迭代就有更大的作用(對(duì)錯(cuò)分?jǐn)?shù)據(jù)進(jìn)行懲罰)。對(duì)于這些權(quán)重,一方面可以使用它們作為抽樣分布,進(jìn)行對(duì)數(shù)據(jù)的抽樣;另一方面,可以使用權(quán)值學(xué)習(xí)有利于高權(quán)重樣本的分類器,把一個(gè)弱分類器提升為一個(gè)強(qiáng)分類器。
弱分類器
Boosting處理過程
Boosting算法通過權(quán)重投票的方式將T個(gè)弱分類器組合成一個(gè)強(qiáng)分類器。只要弱分類器的分類精度高于50%,將其組合到強(qiáng)分類器里,會(huì)逐漸降低強(qiáng)分類器的分類誤差。
由于Boosting將注意力集中在難分的樣本上,使得它對(duì)訓(xùn)練樣本的噪聲非常敏感,主要任務(wù)集中在噪聲樣本上,從而影響最終的分類性能。
對(duì)于Boosting來(lái)說,有兩個(gè)問題需要回答:一是在每一輪如何如何改變訓(xùn)練數(shù)據(jù)的概率分布;二是如何將多個(gè)弱分類器組合成一個(gè)強(qiáng)分類器。而且存在一個(gè)重大的缺陷:該分類算法要求預(yù)先知道弱分類器識(shí)別準(zhǔn)確率的下限。
?
AdaBoosting算法針對(duì)上述Boosting存在的缺陷和問題,Freund和Schapire根據(jù)在線分配算法理論提出了AdaBoost算法,是一種改進(jìn)的Boosting分類算法。
(1)提高那些被前幾輪弱分類器線性組成的分類器錯(cuò)誤分類的的樣本的權(quán)值,這樣做能夠?qū)⒚看斡?xùn)練的焦點(diǎn)集中在比較難分的訓(xùn)練樣本上;
(2)將弱分類器有機(jī)地集成起來(lái),使用加權(quán)投票機(jī)制代替平均投票機(jī)制,從而使識(shí)別準(zhǔn)確率較高的弱分類器具有較大的權(quán)重,使其在表決中起較大的作用,相反,識(shí)別準(zhǔn)確率較低的分類器具有較小的權(quán)重,使其在表決中起較小的作用。與Boosting分類算法相比,AdaBoost算法不需要預(yù)先獲得弱分類算法識(shí)別準(zhǔn)確率的下限(弱分類器的誤差),只需關(guān)注于所有弱分類算法的分類精度(分類準(zhǔn)確率略大于50%)。
?
AdaBoosting算法
訓(xùn)練數(shù)據(jù):
(x1, y1), …, (xm, ym),其中 xi∈X, yi∈Y={-1, +1}
?
Dt(i): 樣本xi在第t次迭代的權(quán)重,D1(i)=1/m
ht(X):弱分類器Ct訓(xùn)練得到的判別函數(shù),ht:X->{-1, +1}
εt:ht(X)的錯(cuò)誤率,加權(quán)分類誤差(weighted error)
?
αt:分類器的系數(shù),根據(jù)誤差計(jì)算,誤差越小,權(quán)重越大
上面權(quán)重Dt+1(i)的更新是基于前一步的權(quán)重Dt(i),而非局域全局更新。
?
AdaBoost分類算法是一種自適應(yīng)提升的方法,由于訓(xùn)練的過程是重復(fù)使用相同的訓(xùn)練集,因而不要求數(shù)據(jù)集很大,其自身就可以組合任意數(shù)量的基分類器。在AdaBoost算法中,盡管不同的基分類器使用的訓(xùn)練集稍有差異,但這種差異是隨機(jī)選擇造成的,所不同的是,這種差異是前一個(gè)基分類器的誤差函數(shù)。而提升的過程是針對(duì)一個(gè)特定問題的實(shí)際性能,顯然這就依賴于具體的數(shù)據(jù)和單個(gè)基分類器的性能。因此,訓(xùn)練的過程需要有充足的訓(xùn)練數(shù)據(jù),并且基分類器應(yīng)當(dāng)是弱的但又不至于太弱(即分類準(zhǔn)確率略大于50%),而提升的過程對(duì)噪聲和離群點(diǎn)的干擾尤為明顯。
Boosting與Bagging的不同之處:
1、Bagging的訓(xùn)練集是隨機(jī)的,以獨(dú)立同分布選取的訓(xùn)練樣本子集訓(xùn)練弱分類器,而Boosting訓(xùn)練集的選擇不是獨(dú)立的,每一次選擇的訓(xùn)練集都依賴于上一次學(xué)習(xí)的結(jié)果,根據(jù)錯(cuò)誤率取樣,因此Boosting的分類精度在大多數(shù)數(shù)據(jù)集中要優(yōu)于Bagging,但是在有些數(shù)據(jù)集中,由于過擬合的原因,Boosting的精度會(huì)退化。
2、Bagging的每個(gè)預(yù)測(cè)函數(shù)(即弱假設(shè))沒有權(quán)重,而Boosting根據(jù)每一次訓(xùn)練的訓(xùn)練誤差得到該次預(yù)測(cè)函數(shù)的權(quán)重;
3、Bagging的各個(gè)預(yù)測(cè)函數(shù)可以并行生成,而Boosting的只能順序生成。
4、Bagging是減少variance,而Boosting是減少bias。
參考資料:
Ensemble methods. Bagging and Boosting
Bagging, boosting and stacking in machine learning
HITSCIR-TM zkli-李澤魁 Bagging & Boosting
_______________________________
1、集成學(xué)習(xí)概述
1.1 集成學(xué)習(xí)概述
集成學(xué)習(xí)在機(jī)器學(xué)習(xí)算法中具有較高的準(zhǔn)去率,不足之處就是模型的訓(xùn)練過程可能比較復(fù)雜,效率不是很高。目前接觸較多的集成學(xué)習(xí)主要有2種:基于Boosting的和基于Bagging,前者的代表算法有Adaboost、GBDT、XGBOOST、后者的代表算法主要是隨機(jī)森林。
1.2 集成學(xué)習(xí)的主要思想?
集成學(xué)習(xí)的主要思想是利用一定的手段學(xué)習(xí)出多個(gè)分類器,而且這多個(gè)分類器要求是弱分類器,然后將多個(gè)分類器進(jìn)行組合公共預(yù)測(cè)。核心思想就是如何訓(xùn)練處多個(gè)弱分類器以及如何將這些弱分類器進(jìn)行組合。
1.3、集成學(xué)習(xí)中弱分類器選擇?
一般采用弱分類器的原因在于將誤差進(jìn)行均衡,因?yàn)橐坏┠硞€(gè)分類器太強(qiáng)了就會(huì)造成后面的結(jié)果受其影響太大,嚴(yán)重的會(huì)導(dǎo)致后面的分類器無(wú)法進(jìn)行分類。常用的弱分類器可以采用誤差率小于0.5的,比如說邏輯回歸、SVM、神經(jīng)網(wǎng)絡(luò)。
1.4、多個(gè)分類器的生成?
可以采用隨機(jī)選取數(shù)據(jù)進(jìn)行分類器的訓(xùn)練,也可以采用不斷的調(diào)整錯(cuò)誤分類的訓(xùn)練數(shù)據(jù)的權(quán)重生成新的分類器。
1.5、多個(gè)弱分類區(qū)如何組合?
基本分類器之間的整合方式,一般有簡(jiǎn)單多數(shù)投票、權(quán)重投票,貝葉斯投票,基于D-S證據(jù)理論的整合,基于不同的特征子集的整合。
2、Boosting算法
2.1 基本概念
Boosting方法是一種用來(lái)提高弱分類算法準(zhǔn)確度的方法,這種方法通過構(gòu)造一個(gè)預(yù)測(cè)函數(shù)系列,然后以一定的方式將他們組合成一個(gè)預(yù)測(cè)函數(shù)。他是一種框架算法,主要是通過對(duì)樣本集的操作獲得樣本子集,然后用弱分類算法在樣本子集上訓(xùn)練生成一系列的基分類器。他可以用來(lái)提高其他弱分類算法的識(shí)別率,也就是將其他的弱分類算法作為基分類算法放于Boosting 框架中,通過Boosting框架對(duì)訓(xùn)練樣本集的操作,得到不同的訓(xùn)練樣本子集,用該樣本子集去訓(xùn)練生成基分類器;每得到一個(gè)樣本集就用該基分類算法在該樣本集上產(chǎn)生一個(gè)基分類器,這樣在給定訓(xùn)練輪數(shù) n 后,就可產(chǎn)生 n 個(gè)基分類器,然后Boosting框架算法將這 n個(gè)基分類器進(jìn)行加權(quán)融合,產(chǎn)生一個(gè)最后的結(jié)果分類器,在這 n個(gè)基分類器中,每個(gè)單個(gè)的分類器的識(shí)別率不一定很高,但他們聯(lián)合后的結(jié)果有很高的識(shí)別率,這樣便提高了該弱分類算法的識(shí)別率。在產(chǎn)生單個(gè)的基分類器時(shí)可用相同的分類算法,也可用不同的分類算法,這些算法一般是不穩(wěn)定的弱分類算法,如神經(jīng)網(wǎng)絡(luò)(BP) ,決策樹(C4.5)等。
2.2、Adaboost
Adaboost是boosting中較為代表的算法,基本思想是通過訓(xùn)練數(shù)據(jù)的分布構(gòu)造一個(gè)分類器,然后通過誤差率求出這個(gè)若弱分類器的權(quán)重,通過更新訓(xùn)練數(shù)據(jù)的分布,迭代進(jìn)行,直到達(dá)到迭代次數(shù)或者損失函數(shù)小于某一閾值。
Adaboost的算法流程:?
假設(shè)訓(xùn)練數(shù)據(jù)集為T={(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4),(X5,Y5)} 其中Yi={-1,1}
1、初始化訓(xùn)練數(shù)據(jù)的分布?
訓(xùn)練數(shù)據(jù)的權(quán)重分布為D={W11,W12,W13,W14,W15},其中W1i=1/N。即平均分配。
2、選擇基本分類器?
這里選擇最簡(jiǎn)單的線性分類器y=aX+b ,分類器選定之后,最小化分類誤差可以求得參數(shù)。
3、計(jì)算分類器的系數(shù)和更新數(shù)據(jù)權(quán)重?
誤差率也可以求出來(lái)為e1.同時(shí)可以求出這個(gè)分類器的系數(shù)。基本的Adaboost給出的系數(shù)計(jì)算公式為?
然后更新訓(xùn)練數(shù)據(jù)的權(quán)重分布,?
(圖片來(lái)自李航的統(tǒng)計(jì)學(xué)習(xí)方法)?
4、分類器的組合
?
當(dāng)然這種組合方式基于分類器的系數(shù)的,而分類器的系數(shù)又是根據(jù)誤差率求出來(lái)的,所以Adaboots最后影響的就是如何使用誤差率,以及訓(xùn)練數(shù)據(jù)更新權(quán)重的的計(jì)算系數(shù)。
5、Adaboost的一些問題
Adaboost中涉及到一些可以進(jìn)行調(diào)整的參數(shù)和計(jì)算公式的選擇主要有以下幾點(diǎn):
**弱分類器如何選擇?
**如何更好的實(shí)驗(yàn)誤差率計(jì)算分類器的系數(shù)?
**如何更好的計(jì)算訓(xùn)練數(shù)據(jù)的權(quán)重的分布?
**弱分類器如何進(jìn)行組合?
**迭代次數(shù)?
**損失函數(shù)的閾值選取多少
3、Bagging算法
bagging方法bootstrap aggregating的縮寫,采用的是隨機(jī)有放回的選擇訓(xùn)練數(shù)據(jù)然后構(gòu)造分類器,最后組合。這里以隨機(jī)森林為例進(jìn)行講解。?
隨機(jī)森林算法概述
隨機(jī)森林算法是上世紀(jì)八十年代Breiman等人提出來(lái)的,其基本思想就是構(gòu)造很多棵決策樹,形成一個(gè)森林,然后用這些決策樹共同決策輸出類別是什么。隨機(jī)森林算法及在構(gòu)建單一決策樹的基礎(chǔ)上的,同時(shí)是單一決策樹算法的延伸和改進(jìn)。在整個(gè)隨機(jī)森林算法的過程中,有兩個(gè)隨機(jī)過程,第一個(gè)就是輸入數(shù)據(jù)是隨機(jī)的從整體的訓(xùn)練數(shù)據(jù)中選取一部分作為一棵決策樹的構(gòu)建,而且是有放回的選取;第二個(gè)就是每棵決策樹的構(gòu)建所需的特征是從整體的特征集隨機(jī)的選取的,這兩個(gè)隨機(jī)過程使得隨機(jī)森林很大程度上避免了過擬合現(xiàn)象的出現(xiàn)。
隨機(jī)森林算法具體的過程:
1、從訓(xùn)練數(shù)據(jù)中選取n個(gè)數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)輸入,一般情況下n是遠(yuǎn)小于整體的訓(xùn)練數(shù)據(jù)N的,這樣就會(huì)造成有一部分?jǐn)?shù)據(jù)是無(wú)法被去到的,這部分?jǐn)?shù)據(jù)稱為袋外數(shù)據(jù),可以使用袋外數(shù)據(jù)做誤差估計(jì)。
2、選取了輸入的訓(xùn)練數(shù)據(jù)的之后,需要構(gòu)建決策樹,具體方法是每一個(gè)分裂結(jié)點(diǎn)從整體的特征集M中選取m個(gè)特征構(gòu)建,一般情況下m遠(yuǎn)小于M。
3、在構(gòu)造每棵決策樹的過程中,按照選取最小的基尼指數(shù)進(jìn)行分裂節(jié)點(diǎn)的選取進(jìn)行決策樹的構(gòu)建。決策樹的其他結(jié)點(diǎn)都采取相同的分裂規(guī)則進(jìn)行構(gòu)建,直到該節(jié)點(diǎn)的所有訓(xùn)練樣例都屬于同一類或者達(dá)到樹的最大深度。
4、 重復(fù)第2步和第3步多次,每一次輸入數(shù)據(jù)對(duì)應(yīng)一顆決策樹,這樣就得到了隨機(jī)森林,可以用來(lái)對(duì)預(yù)測(cè)數(shù)據(jù)進(jìn)行決策。
5、 輸入的訓(xùn)練數(shù)據(jù)選擇好了,多棵決策樹也構(gòu)建好了,對(duì)待預(yù)測(cè)數(shù)據(jù)進(jìn)行預(yù)測(cè),比如說輸入一個(gè)待預(yù)測(cè)數(shù)據(jù),然后多棵決策樹同時(shí)進(jìn)行決策,最后采用多數(shù)投票的方式進(jìn)行類別的決策。
隨機(jī)森林算法圖示
隨機(jī)森林算法的注意點(diǎn):
1、 在構(gòu)建決策樹的過程中是不需要剪枝的。?
2、 整個(gè)森林的樹的數(shù)量和每棵樹的特征需要人為進(jìn)行設(shè)定。?
3、 構(gòu)建決策樹的時(shí)候分裂節(jié)點(diǎn)的選擇是依據(jù)最小基尼系數(shù)的。
隨機(jī)森林有很多的優(yōu)點(diǎn):
a. 在數(shù)據(jù)集上表現(xiàn)良好,兩個(gè)隨機(jī)性的引入,使得隨機(jī)森林不容易陷入過擬合。
b. 在當(dāng)前的很多數(shù)據(jù)集上,相對(duì)其他算法有著很大的優(yōu)勢(shì),兩個(gè)隨機(jī)性的引入,使得隨機(jī)森林具有很好的抗噪聲能力。
c. 它能夠處理很高維度(feature很多)的數(shù)據(jù),并且不用做特征選擇,對(duì)數(shù)據(jù)集的適應(yīng)能力強(qiáng):既能處理離散型數(shù)據(jù),也能處理連續(xù)型數(shù)據(jù),數(shù)據(jù)集無(wú)需規(guī)范化。
d. 在創(chuàng)建隨機(jī)森林的時(shí)候,對(duì)generlization error使用的是無(wú)偏估計(jì)。
e. 訓(xùn)練速度快,可以得到變量重要性排序。
f. 在訓(xùn)練過程中,能夠檢測(cè)到feature間的互相影響。
g 容易做成并行化方法。
h. 實(shí)現(xiàn)比較簡(jiǎn)單。
總結(jié)
以上是生活随笔為你收集整理的集成学习算法总结----Boosting和Bagging的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: timestamp与timedelta,
- 下一篇: Oracle PL/SQL入门之慨述