1. 程式人生 > >整合學習(Ensemble Learning)

整合學習(Ensemble Learning)

 

                                                        開啟微信掃一掃,關注微信公眾號【資料與演算法聯盟】 

轉載請註明出處:http://blog.csdn.net/gamer_gyt 
博主微博:http://weibo.com/234654758 
Github:https://github.com/thinkgamer

在機器學習的有監督學習演算法中,我們的目標是學習出一個穩定的且在各個方面表現都較好的模型,但實際情況往往不這麼理想,有時我們只能得到多個有偏好的模型(弱監督模型,在某些方面表現的比較好)。整合學習就是組合這裡的多個弱監督模型以期得到一個更好更全面的強監督模型,整合學習潛在的思想是即便某一個弱分類器得到了錯誤的預測,其他的弱分類器也可以將錯誤糾正回來。

整合學習在各個規模的資料集上都有很好的策略。

  • 資料集大:劃分成多個小資料集,學習多個模型進行組合

  • 資料集小:利用Bootstrap方法進行抽樣,得到多個數據集,分別訓練多個模型再進行組合


這篇部落格介紹一下整合學習的幾類:Bagging,Boosting以及Stacking。

Bagging

Bagging是bootstrap aggregating的簡寫。先說一下bootstrap,bootstrap也稱為自助法,它是一種有放回的抽樣方法,目的為了得到統計量的分佈以及置信區間。具體步驟如下

  • 採用重抽樣方法(有放回抽樣)從原始樣本中抽取一定數量的樣本

  • 根據抽出的樣本計算想要得到的統計量T

  • 重複上述N次(一般大於1000),得到N個統計量T

  • 根據這N個統計量,即可計算出統計量的置信區間

 

在Bagging方法中,利用bootstrap方法從整體資料集中採取有放回抽樣得到N個數據集,在每個資料集上學習出一個模型,最後的預測結果利用N個模型的輸出得到,具體地:分類問題採用N個模型預測投票的方式,迴歸問題採用N個模型預測平均的方式。

例如隨機森林(Random Forest)就屬於Bagging。隨機森林簡單地來說就是用隨機的方式建立一個森林,森林由很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。

在我們學習每一棵決策樹的時候就需要用到Bootstrap方法。在隨機森林中,有兩個隨機取樣的過程:對輸入資料的行(資料的數量)與列(資料的特徵)都進行取樣。對於行取樣,採用有放回的方式,若有N個數據,則取樣出N個數據(可能有重複),這樣在訓練的時候每一棵樹都不是全部的樣本,相對而言不容易出現overfitting;接著進行列取樣從M個feature中選擇出m個(m<<M)。最近進行決策樹的學習。

預測的時候,隨機森林中的每一棵樹的都對輸入進行預測,最後進行投票,哪個類別多,輸入樣本就屬於哪個類別。這就相當於前面說的,每一個分類器(每一棵樹)都比較弱,但組合到一起(投票)就比較強了。

Boosting

提升方法(Boosting)是一種可以用來減小監督學習中偏差的機器學習演算法。主要也是學習一系列弱分類器,並將其組合為一個強分類器。Boosting中有代表性的是AdaBoost(Adaptive boosting)演算法:剛開始訓練時對每一個訓練例賦相等的權重,然後用該演算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練例賦以較大的權重,也就是讓學習演算法在每次學習以後更注意學錯的樣本,從而得到多個預測函式。具體可以參考《統計學習方法》。

Stacking

Stacking方法是指訓練一個模型用於組合其他各個模型。首先我們先訓練多個不同的模型,然後把之前訓練的各個模型的輸出為輸入來訓練一個模型,以得到一個最終的輸出。理論上,Stacking可以表示上面提到的兩種Ensemble方法,只要我們採用合適的模型組合策略即可。但在實際中,我們通常使用logistic迴歸作為組合策略。

如下圖,先在整個訓練資料集上通過bootstrap抽樣得到各個訓練集合,得到一系列分類模型,稱之為Tier 1分類器(可以採用交叉驗證的方式學習),然後將輸出用於訓練Tier 2 分類器。

Bagging與Boosting

Bagging和Boosting採用的都是取樣-學習-組合的方式,但在細節上有一些不同,如

  • Bagging中每個訓練集互不相關,也就是每個基分類器互不相關,而Boosting中訓練集要在上一輪的結果上進行調整,也使得其不能平行計算

  • Bagging中預測函式是均勻平等的,但在Boosting中預測函式是加權的


 

在演算法學習的時候,通常在bias和variance之間要有一個權衡。bias與variance的關係如下圖,因而模型要想達到最優的效果,必須要兼顧bias和variance,也就是要採取策略使得兩者比較平衡。

 

從演算法來看,Bagging關注的是多個基模型的投票組合,保證了模型的穩定,因而每一個基模型就要相對複雜一些以降低偏差(比如每一棵決策樹都很深);而Boosting採用的策略是在每一次學習中都減少上一輪的偏差,因而在保證了偏差的基礎上就要將每一個基分類器簡化使得方差更小。