集成學(xué)習(xí)(1)模型誤差與集成學(xué)習(xí)

1 模型誤差——偏差與方差

之前我們已經(jīng)說了不少模型,這些模型的特點(diǎn)是:1、都是有監(jiān)督模型;2、都是個(gè)體模型,基本上都是一個(gè)輸入、一套參數(shù)、一個(gè)輸出。一般來說,我們的有監(jiān)督模型不可能做到百分比百的預(yù)測(cè)準(zhǔn)確率,會(huì)與真實(shí)值存在一定的誤差,而我們的目標(biāo)就是不斷的縮小誤差,創(chuàng)造出更好的算法,知己知彼百戰(zhàn)不殆,鑒于此,我們首先要去了解我們的對(duì)手——誤差。

試想,如果我們能搞到所有的數(shù)據(jù),然后用完美的模型擬合他們,那么就做到零誤差了,然而這只能是想想而已,現(xiàn)實(shí)中我們的樣本數(shù)據(jù)只能是所有數(shù)據(jù)的一部分,并且樣本數(shù)據(jù)本身還可能存在一定的噪聲,模型本身也不是完美的,因此我們基于這些樣本數(shù)據(jù)做出來的算法的誤差就會(huì)包含這三個(gè)部分:

  • 偏差Bias:是根據(jù)樣本數(shù)據(jù)做出來的算法與樣本數(shù)據(jù)本身之間的差異,是期望輸出與真實(shí)結(jié)果的偏離程度。度量了算法的擬合能力,比如我們?cè)谏浼珺ias高的意思就是:知道目標(biāo)在哪,不過弓(算法)不好,對(duì)著目標(biāo)也還是射不準(zhǔn),弓(算法)本身準(zhǔn)頭不行,那么這種情況就叫做偏差如下圖中的下面兩幅,所有的點(diǎn)以同樣的趨勢(shì)偏離目標(biāo)位置;
  • 方差Variance:使用同樣大小、不同數(shù)據(jù)的訓(xùn)練集訓(xùn)練出的模型之間的差異,代表模型是否通過訓(xùn)練數(shù)據(jù)抓住了數(shù)據(jù)本質(zhì)的共性。Variance 高表示模型不穩(wěn)定,對(duì)不同數(shù)據(jù)表現(xiàn)波動(dòng)大。同樣以射箭為例,就是對(duì)著目標(biāo)射同一個(gè)箭(數(shù)據(jù)點(diǎn)),不同的弓(不同數(shù)據(jù)訓(xùn)練出的算法模型)射中的位置差異比較大,如下圖中的右面兩幅,所有的點(diǎn)分散的分布在某一點(diǎn)周圍;
  • Noise:數(shù)據(jù)本身的誤差,也是任何算法無法抹去的誤差。

Noise無法避免,所以我們需要盡量降低偏差Bias和方差Variance,就像上圖,顯然左上角的那個(gè)結(jié)果才是我們的追求。

以數(shù)學(xué)語言來描述這些誤差,假設(shè)存在關(guān)系Y = f(X) + \epsilon ,誤差 \epsilon \sim \mathcal{N}(0,\sigma_\epsilon),我們用模型\hat{f}(X)來擬合f(X),用均方損失來表示預(yù)測(cè)值與真實(shí)值之間的誤差:

Err(x) = E\left[(Y-\hat{f}(x))^2\right]

把平方展開,可以推導(dǎo)得到誤差:

Err(x) = \left(E[\hat{f}(x)]-f(x)\right)^2 + E\left[\left(\hat{f}(x)-E[\hat{f}(x)]\right)^2\right] +\sigma_e^2

= \mathrm{Bias}^2 + \mathrm{Variance} + \mathrm{Noise}

其中{Noise}>0代表著數(shù)據(jù)本身的固有誤差,{Bias}^2 + Variance>0代表模型本身的不完美,偏差和方差是互相博弈的,他們不可能一直同時(shí)減小,最終一方的減小必然導(dǎo)致另一方的增大,所以我們需要尋找 tradeoff,如下圖所示,隨著模型越來越復(fù)雜,bias下降而variance上升,在訓(xùn)練集中 Bias 下降與 Variance 上升的過程中來找到tradeoff ,這時(shí)的 Model Complexity 是適中的,此時(shí)整體error最小,是擬合能力和泛化能力都比較好的模型:

所以尋找偏差與方差的tradeoff的過程,實(shí)質(zhì)上也就是在平衡欠擬合與過擬合的過程,偏差大說明可能欠擬合,方差大說明可能過擬合,我們之前所說過的算法模型中也有相關(guān)的操作,比如對(duì)擬合能力非常強(qiáng)的決策樹進(jìn)行剪枝、對(duì)SVM嚴(yán)格要求的硬間隔最大化放松限制、對(duì)線性回歸和邏輯回歸等進(jìn)行正則化處理等,都是尋找 tradeoff 的思路。

2 集成學(xué)習(xí)

2.1 概述

對(duì)于我們之前介紹過的個(gè)體模型來說,在大多數(shù)情況下,這些個(gè)體模型本身的性能還是不夠好,有的模型具有較高的偏差(如線性回歸、邏輯回歸等依賴數(shù)據(jù)假設(shè)),有的模型方差太大,魯棒性不強(qiáng)(如決策樹、KNN等)。因此我們產(chǎn)生了一種想法:如果把這些個(gè)體模型綜合起來,會(huì)不會(huì)產(chǎn)生三個(gè)臭皮匠的效果?對(duì)這方面的研究就是集成學(xué)習(xí),集成方法的思想就是通過將這些個(gè)體學(xué)習(xí)器的偏差、方差結(jié)合起來,從而創(chuàng)建一個(gè)集成模型,獲得更好的預(yù)測(cè)效果。

我們先簡(jiǎn)單的分析下為什么集成學(xué)習(xí)可以是模型的預(yù)測(cè)變得更準(zhǔn)確,以二分類問題為例,真實(shí)函數(shù)為f(x),基模型為h_i(x),假設(shè)基模型的錯(cuò)誤率為\epsilon,即:

P(h_i(x)\neq f(x))=\epsilon

假設(shè)集成模型的結(jié)合策略為投票法,則T個(gè)基模型中半數(shù)以上正確即能得到正確結(jié)果:

H(x)=sign(\sum_{i=1}^Th_i(x))

假設(shè)基模型相互獨(dú)立,集成模型的錯(cuò)誤率為:

P(H(x)\neq f(x))=\sum_{k=1}^{T/2}(1-\epsilon)^k\epsilon^{T-k}

根據(jù)霍夫丁不等式( Hoeffding's inequality)知:

P(H(x)\neq f(x))=\sum_{k=1}^{T/2}(1-\epsilon)^k\epsilon^{T-k}\leq exp(-0.5T(1-2\epsilon)^2)

可見,隨著集成模型中基模型數(shù)目T的增加,集成模型的錯(cuò)誤率將指數(shù)級(jí)下降,因此集成模型能夠有效提高模型的準(zhǔn)確率。

既然集成模型這么棒,我們就要考慮怎么進(jìn)行集成了,要進(jìn)行個(gè)體模型的集成,必然要考慮:
1.個(gè)體模型的特性:對(duì)于要集成的個(gè)體模型,一般稱為弱學(xué)習(xí)器,這里的弱應(yīng)該也不是真的弱,是個(gè)相對(duì)的概念,強(qiáng)學(xué)習(xí)器當(dāng)然也可以集成,我覺得應(yīng)該是一開始研究的就是集成弱學(xué)習(xí)器,所以就延續(xù)下來了這個(gè)概念,不過被集成的弱學(xué)習(xí)器也不能太弱,正確率要大于50%,不然就不是“三個(gè)臭皮匠頂個(gè)諸葛亮”,而是“烏合之眾”、“成事不足敗事有余”了;
2.個(gè)體模型之間的關(guān)系:個(gè)體模型間關(guān)系不大,認(rèn)為相互獨(dú)立,可并行運(yùn)行,個(gè)體模型間不獨(dú)立,只能串行運(yùn)行
3.對(duì)他們集成的方法:只包含同種類型的個(gè)體學(xué)習(xí)器,稱為同質(zhì)集成 ,包含不同類型的個(gè)體學(xué)習(xí)器,為異質(zhì)集成

綜合考慮這三個(gè)因素,我們一般將集成學(xué)習(xí)分為三類:
1.bagging(Bootstrap Aggregating):針對(duì)獨(dú)立的同質(zhì)弱學(xué)習(xí)器,相互獨(dú)立地并行學(xué)習(xí)這些弱學(xué)習(xí)器,并按照某種確定性的平均過程將它們組合起來。(注意這里所說的獨(dú)立并不是絕對(duì)的獨(dú)立,只是沒有強(qiáng)依賴關(guān)系,下同)
2.boosting:針對(duì)不獨(dú)立的同質(zhì)弱學(xué)習(xí)器。它以一種高度自適應(yīng)的方法順序地學(xué)習(xí)這些弱學(xué)習(xí)器(每個(gè)基礎(chǔ)模型都依賴于前面的模型),并按照某種確定性的策略將它們組合起來。
3.stacking:針對(duì)獨(dú)立的異質(zhì)弱學(xué)習(xí)器并行地學(xué)習(xí)它們,并通過訓(xùn)練一個(gè)元模型將它們組合起來,根據(jù)不同弱模型的預(yù)測(cè)結(jié)果輸出一個(gè)最終的預(yù)測(cè)結(jié)果。

2.2 bagging

上一小節(jié)我們說,bagging集成的獨(dú)立的同質(zhì)弱學(xué)習(xí)器,同質(zhì)弱學(xué)習(xí)器好找,這個(gè)“獨(dú)立”怎么保證呢?bagging采用的方法是對(duì)訓(xùn)練樣本進(jìn)行隨機(jī)抽樣(有放回抽樣),用不同的訓(xùn)練樣本集來訓(xùn)練不同的模型來使模型間盡量獨(dú)立,實(shí)際上,如果兩次抽樣結(jié)果是有交集的,那么其還是不能算完全獨(dú)立的,只能說是盡量保證獨(dú)立性吧。bagging通過訓(xùn)練抽樣得到的自訓(xùn)練集來訓(xùn)練得到多個(gè)基模型,對(duì)所有基模型預(yù)測(cè)的結(jié)果進(jìn)行綜合(比如投票,少數(shù)服從多數(shù))產(chǎn)生最終的預(yù)測(cè)結(jié)果:

bagging這種集成模型有什么好處呢?可以說,bagging是最貼合“三個(gè)臭皮匠頂個(gè)諸葛亮”這一說法的,bagging靠大家集思廣益來降低預(yù)測(cè)誤差,并且是通過降低方差來實(shí)現(xiàn),不會(huì)降低模型的偏差,所以一般采用低偏差高方差的算法作為基模型,比如沒有剪枝的決策樹。為什么說bagging降低方差variance而不降低偏差bias呢?因?yàn)榛P投际峭|(zhì)的,并且子訓(xùn)練集來自同樣的樣本數(shù)據(jù),可以認(rèn)為基模型有近似相等的bias和variance,假設(shè)基模型都是相互獨(dú)立的(當(dāng)然一般并不是完全獨(dú)立),因此可以計(jì)算集成模型的預(yù)測(cè)值期望與方差:

E(X)=E(\frac{\sum_{i=1}^n X_i}{n})=\frac{\sum_{i=1}^n E(X_i)}{n}=E(X_i)

Var(X)=Var(\frac{\sum_{i=1}^n X_i}{n})=\frac{\sum_{i=1}^n Var(X_i)}{n^2}=\frac{Var(X_i)}{n}

顯然,預(yù)測(cè)值的期望并沒有什么變化,而方差減小了很多,當(dāng)然,這是基模型相互獨(dú)立的結(jié)果,如果不是相互獨(dú)立的話方差的降幅會(huì)小一些,極限是所有的基模型都是一樣的,那么集成模型就完全沒有優(yōu)化。

2.3 boosting

如果說bagging是“三個(gè)臭皮匠頂個(gè)諸葛亮”的體現(xiàn),那boosting就應(yīng)該是“如果說我看得比別人更遠(yuǎn)些,那是因?yàn)槲艺驹诰奕说募绨蛏稀?/strong>。
boosting的訓(xùn)練過程為階梯狀,基模型按順序串行進(jìn)行訓(xùn)練(工程實(shí)現(xiàn)可以做到并行),基模型的訓(xùn)練集按照某種策略每次都進(jìn)行一定的轉(zhuǎn)化(比如更新每次的權(quán)重),對(duì)所有基模型預(yù)測(cè)的結(jié)果進(jìn)行線性綜合產(chǎn)生最終的預(yù)測(cè)結(jié)果:

boosting的思想是:先從初始訓(xùn)練集訓(xùn)練出一個(gè)基學(xué)習(xí)器,再根據(jù)其表現(xiàn)對(duì)訓(xùn)練樣本分布進(jìn)行調(diào)整,使得此基學(xué)習(xí)器預(yù)測(cè)錯(cuò)誤的訓(xùn)練樣本在接下來的訓(xùn)練中受到更多關(guān)注,所以boosting實(shí)際上一直通過改變樣本的分布來優(yōu)化loss function,在降低loss,同時(shí)因?yàn)閎oosting中的基學(xué)習(xí)器都是高度相關(guān)的,所以其集成后也沒法降低整體的方差,那么很顯然,boosting實(shí)際上是減少bias,而不會(huì)減少方差variance,因此一般采用高偏差低方差的算法作為基模型。

2.4 stacking

stacking沒用過,不太了解,聽說在比賽里特別厲害,以后有空研究研究。。。。。。看到資料上說:

Stacking算法分為2層,第一層是用不同的算法形成T個(gè)弱分類器,同時(shí)產(chǎn)生一個(gè)與原數(shù)據(jù)集大小相同的新數(shù)據(jù)集,利用這個(gè)新數(shù)據(jù)集和一個(gè)新算法構(gòu)成第二層的分類器。Stacking 就像是 Bagging的升級(jí)版,Bagging中的融合各個(gè)基礎(chǔ)分類器是相同權(quán)重,而Stacking中則不同,Stacking中第二層學(xué)習(xí)的過程就是為了尋找合適的權(quán)重或者合適的組合方式。

3 總結(jié)

所謂集成學(xué)習(xí),就是面對(duì)比較難一些的問題時(shí),把多個(gè)水平一般的選手,通過合體術(shù)合體成一個(gè)更強(qiáng)的合體人來對(duì)付,就像孫悟空和貝吉塔合體變成貝吉特一樣,同樣我們的結(jié)合策略不同,形成的集成模型也不同,就像悟空和貝吉塔使用耳環(huán)合體變成貝吉特,舞步合體變成悟吉塔。

耳環(huán)合體變成貝吉特

各種集成學(xué)習(xí)的優(yōu)缺點(diǎn)就不說了,上面都已經(jīng)比較清楚了,在集成學(xué)習(xí)中,有一些比較經(jīng)典的常用算法,如下圖所示,像bagging中的隨機(jī)森林(Random Forest, RF),boosting中的自適應(yīng)提升算法(Adaptive Boosting,Adaboost)、梯度提升樹(Gradient Boosting Decison Tree, GBDT)、極端梯度提升(eXtreme Gradient Boosting,XGBoost):

接下來幾篇中我們來一起看一看這些常用的算法。



主要參考
《機(jī)器學(xué)習(xí)》——周志華
Understanding the Bias-Variance Tradeoff

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。