集成学习算法-基础
?
? ? ? ?集成學(xué)習(xí)算法,它本身不是一個單獨(dú)的機(jī)器學(xué)習(xí)算法,集成是結(jié)合不同的學(xué)習(xí)模塊(單個模型)來加強(qiáng)模型的穩(wěn)定性和預(yù)測能力。集成學(xué)習(xí)把大大小小的多種算法融合在一起,共同協(xié)作來解決一個問題,也就是我們常說的“博采眾長”。集成學(xué)習(xí)可以用于分類問題集成,回歸問題集成,特征選取集成,異常點(diǎn)檢測集成等等。集成學(xué)習(xí)有兩個關(guān)鍵點(diǎn):
1)怎么訓(xùn)練每個算法?
2)怎么融合每個算法?
圍繞這兩個關(guān)鍵點(diǎn),有很多方法提出來,極具代表性就是大家熟知的 Bagging 和 Boosting 方法,其中 Bagging 和 Boosting 也是當(dāng)今兩大算法 RF(Random Forests)和 GBDT(Gradient Boosting Decision Tree)應(yīng)用廣泛的主要原因。
目錄
集成學(xué)習(xí)概述
集成學(xué)習(xí)之Boosting
集成學(xué)習(xí)之Bagging
集成學(xué)習(xí)算法對比
集成學(xué)習(xí)概述
從下圖,我們可以對集成學(xué)習(xí)的思想做一個概括。對于訓(xùn)練集數(shù)據(jù),我們通過訓(xùn)練若干個個體學(xué)習(xí)器,通過一定的結(jié)合策略,就可以最終形成一個強(qiáng)學(xué)習(xí)器,以達(dá)到博采眾長的目的。
?
也就是說,集成學(xué)習(xí)有兩個主要的問題需要解決,第一是如何得到若干個個體學(xué)習(xí)器,第二是如何選擇一種結(jié)合策略,將這些個體學(xué)習(xí)器集合成一個強(qiáng)學(xué)習(xí)器。集成也分幾種:
1、不同算法的集成
2、同一種算法在不同參數(shù)設(shè)置的集成
3、數(shù)據(jù)集的不同部分分配給不同分類器之后的集成。
?
集成學(xué)習(xí)的第一個問題就是如何得到若干個個體學(xué)習(xí)器,這里我們有兩種選擇。
第一種就是所有的個體學(xué)習(xí)器都是一個種類的,或者說是同質(zhì)的。比如都是決策樹個體學(xué)習(xí)器,或者都是神經(jīng)網(wǎng)絡(luò)個體學(xué)習(xí)器;
第二種是所有的個體學(xué)習(xí)器不全是一個種類的,或者說是異質(zhì)的。比如我們有一個分類問題,對訓(xùn)練集采用支持向量機(jī)個體學(xué)習(xí)器,邏輯回歸個體學(xué)習(xí)器和樸素貝葉斯個體學(xué)習(xí)器來學(xué)習(xí),再通過某種結(jié)合策略來確定最終的分類強(qiáng)學(xué)習(xí)器;
目前來說,同質(zhì)個體學(xué)習(xí)器的應(yīng)用是最廣泛的,一般我們常說的集成學(xué)習(xí)的方法都是指的同質(zhì)個體學(xué)習(xí)器。而同質(zhì)個體學(xué)習(xí)器使用最多的模型是CART決策樹和神經(jīng)網(wǎng)絡(luò)。同質(zhì)個體學(xué)習(xí)器按照個體學(xué)習(xí)器之間是否存在依賴關(guān)系可以分為兩類。
第一個是個體學(xué)習(xí)器之間存在強(qiáng)依賴關(guān)系,一系列個體學(xué)習(xí)器基本都需要串行生成,代表算法是boosting系列算法;
第二個是個體學(xué)習(xí)器之間不存在強(qiáng)依賴關(guān)系,一系列個體學(xué)習(xí)器可以并行生成,代表算法是bagging和隨機(jī)森林(Random Forest)系列算法;
?
集成學(xué)習(xí)之Boosting
Boosting的算法原理我們可以用一張圖做一個概括如下:
?
從圖中可以看出,Boosting算法的工作機(jī)制是首先從訓(xùn)練集用初始權(quán)重訓(xùn)練出一個弱學(xué)習(xí)器1,根據(jù)弱學(xué)習(xí)的學(xué)習(xí)誤差率表現(xiàn)來更新訓(xùn)練樣本的權(quán)重,使得之前弱學(xué)習(xí)器1學(xué)習(xí)誤差率高的訓(xùn)練樣本點(diǎn)的權(quán)重變高,使得這些誤差率高的點(diǎn)在后面的弱學(xué)習(xí)器2中得到更多的重視。然后基本調(diào)整權(quán)重后的訓(xùn)練集來訓(xùn)練弱學(xué)習(xí)器2,如此重復(fù)進(jìn)行,直到弱學(xué)習(xí)器數(shù)達(dá)到事先指定的數(shù)目T,最終將這T個弱學(xué)習(xí)器通過集合策略進(jìn)行整合,得到最終的強(qiáng)學(xué)習(xí)器。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升樹(boosting tree)系列算法。提升樹系列算法里面應(yīng)用最廣泛的是梯度提升樹(Gradient Boosting Tree)。
?
集成學(xué)習(xí)之Bagging
Bagging?的算法原理和 Boosting不同,它的弱學(xué)習(xí)器之間沒有依賴關(guān)系,可以并行生成,我們可以用一張圖做一個概括如下:
?
從上圖可以看出,Bagging的個體弱學(xué)習(xí)器的訓(xùn)練集是通過隨機(jī)采樣得到的。通過T次的隨機(jī)采樣,我們就可以得到T個采樣集,對于這T個采樣集,我們可以分別獨(dú)立的訓(xùn)練出T個弱學(xué)習(xí)器,再對這T個弱學(xué)習(xí)器通過集合策略來得到最終的強(qiáng)學(xué)習(xí)器。
其算法過程如下:
A)從原始樣本集中抽取訓(xùn)練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個訓(xùn)練樣本(在訓(xùn)練集中,有些樣本可能被多次抽取到,而有些樣本可能一次都沒有被抽中)。共進(jìn)行k輪抽取,得到k個訓(xùn)練集。(k個訓(xùn)練集之間是相互獨(dú)立的)
B)每次使用一個訓(xùn)練集得到一個模型,k個訓(xùn)練集共得到k個模型。(注:這里并沒有具體的分類算法或回歸方法,我們可以根據(jù)具體問題采用不同的分類或回歸方法,如決策樹、感知器等)
C)對分類問題:將上步得到的k個模型采用投票的方式得到分類結(jié)果;對回歸問題,計(jì)算上述模型的均值作為最后的結(jié)果。(所有模型的重要性相同)
對于這里的隨機(jī)采樣有必要做進(jìn)一步的介紹,這里一般采用的是自助采樣法(Bootstap Sampling),即對于m個樣本的原始訓(xùn)練集,我們每次先隨機(jī)采集一個樣本放入采樣集,接著把該樣本放回,也就是說下次采樣時該樣本仍有可能被采集到,這樣采集m次,最終可以得到m個樣本的采樣集,由于是隨機(jī)采樣,這樣每次的采樣集是和原始訓(xùn)練集不同的,和其他采樣集也是不同的,這樣得到多個不同的弱學(xué)習(xí)器。
隨機(jī)森林是Bagging的一個特化進(jìn)階版,所謂的特化是因?yàn)殡S機(jī)森林的弱學(xué)習(xí)器都是決策樹。所謂的進(jìn)階是隨機(jī)森林在Bagging的樣本隨機(jī)采樣基礎(chǔ)上,又加上了特征的隨機(jī)選擇,其基本思想沒有脫離Bagging的范疇。
?
集成學(xué)習(xí)之Stacking
Stacking方法是指訓(xùn)練一個模型用于組合其他各個模型。首先我們先訓(xùn)練多個不同的模型,然后把之前訓(xùn)練的各個模型的輸出為輸入來訓(xùn)練一個模型,以得到一個最終的輸出。理論上,Stacking可以表示上面提到的兩種Ensemble方法,只要我們采用合適的模型組合策略即可。但在實(shí)際中,我們通常使用logistic回歸作為組合策略。
如下圖,先在整個訓(xùn)練數(shù)據(jù)集上通過bootstrap抽樣得到各個訓(xùn)練集合,得到一系列分類模型,然后將輸出用于訓(xùn)練第二層分類器。
?
集成學(xué)習(xí)之結(jié)合策略
在上面幾節(jié)里面我們主要關(guān)注于學(xué)習(xí)器,提到了學(xué)習(xí)器的結(jié)合策略但沒有細(xì)講,本節(jié)就對集成學(xué)習(xí)之結(jié)合策略做一個總結(jié)。我們假定我得到的T個弱學(xué)習(xí)器是{h1,h2,...hT}
平均法
對于數(shù)值類的回歸預(yù)測問題,通常使用的結(jié)合策略是平均法,也就是說,對于若干和弱學(xué)習(xí)器的輸出進(jìn)行平均得到最終的預(yù)測輸出。
投票法
對于分類問題的預(yù)測,我們通常使用的是投票法。假設(shè)我們的預(yù)測類別是{c1,c2,...cK}對于任意一個預(yù)測樣本x,我們的T個弱學(xué)習(xí)器的預(yù)測結(jié)果分別是(h1(x),h2(x)...hT(x))。最簡單的投票法是相對多數(shù)投票法,也就是我們常說的少數(shù)服從多數(shù),也就是T個弱學(xué)習(xí)器的對樣本x的預(yù)測結(jié)果中,數(shù)量最多的類別ci為最終的分類類別。
如果不止一個類別獲得最高票,則隨機(jī)選擇一個做最終類別。稍微復(fù)雜的投票法是絕對多數(shù)投票法,也就是我們常說的要票過半數(shù)。在相對多數(shù)投票法的基礎(chǔ)上,不光要求獲得最高票,還要求票過半數(shù)。否則會拒絕預(yù)測。更加復(fù)雜的是加權(quán)投票法,和加權(quán)平均法一樣,每個弱學(xué)習(xí)器的分類票數(shù)要乘以一個權(quán)重,最終將各個類別的加權(quán)票數(shù)求和,最大的值對應(yīng)的類別為最終類別。
學(xué)習(xí)法
上兩節(jié)的方法都是對弱學(xué)習(xí)器的結(jié)果做平均或者投票,相對比較簡單,但是可能學(xué)習(xí)誤差較大,于是就有了學(xué)習(xí)法這種方法,對于學(xué)習(xí)法,代表方法是stacking,當(dāng)使用stacking的結(jié)合策略時, 我們不是對弱學(xué)習(xí)器的結(jié)果做簡單的邏輯處理,而是再加上一層學(xué)習(xí)器,也就是說,我們將訓(xùn)練集弱學(xué)習(xí)器的學(xué)習(xí)結(jié)果作為輸入,將訓(xùn)練集的輸出作為輸出,重新訓(xùn)練一個學(xué)習(xí)器來得到最終結(jié)果。在這種情況下,我們將弱學(xué)習(xí)器稱為初級學(xué)習(xí)器,將用于結(jié)合的學(xué)習(xí)器稱為次級學(xué)習(xí)器。對于測試集,我們首先用初級學(xué)習(xí)器預(yù)測一次,得到次級學(xué)習(xí)器的輸入樣本,再用次級學(xué)習(xí)器預(yù)測一次,得到最終的預(yù)測結(jié)果。
?
集成學(xué)習(xí)算法對比
Boosting集成
1.常見的算法代表有GBDT,XGboost,LightGBM;
2.單個算法串行集成;
3.樣本是固定的,改變的是每個樣的權(quán)重,根據(jù)錯誤率調(diào)整樣本權(quán)重,錯誤率越大的樣本權(quán)重會變大;
Bagging集成
1.常見的算法代表有RandomForest;
2.單個算法并行集成;
3.對樣本是隨機(jī)有放回的取樣,每個樣本的權(quán)重相同;
4.對于分類問題:由投票表決產(chǎn)生的分類結(jié)果;對于回歸問題,由k個模型預(yù)測結(jié)果的均值作為最后預(yù)測的結(jié)果;
?
?
?
參考鏈接:https://www.zhihu.com/question/29036379?sort=created
參考鏈接:https://www.cnblogs.com/pinard/
?
總結(jié)
- 上一篇: Hadoop中Block和Split区别
- 下一篇: 集成学习-Boosting集成学习算法A