本文來(lái)自之前在Udacity上自學(xué)機(jī)器學(xué)習(xí)的系列筆記。這是第14篇,介紹了監(jiān)督學(xué)習(xí)中的集成學(xué)習(xí)。
什么是集成學(xué)習(xí)
如果我們要對(duì)郵件進(jìn)行判斷,是否屬于垃圾郵件。首先,我們有一大堆做好分類的郵件數(shù)據(jù)集。通過(guò)觀察屬于垃圾郵件的數(shù)據(jù),每次觀察一部分,可以得到一個(gè)關(guān)于垃圾郵件的規(guī)則。比如說(shuō),規(guī)則一是垃圾郵件有關(guān)于“促銷”的文字;規(guī)則二是郵件包含了“尼日利亞王子”;規(guī)則三郵件內(nèi)容很短,只有兩行文字等。最后,我們將這些規(guī)則合并起來(lái),組成一個(gè)總的判斷規(guī)則來(lái)對(duì)郵件進(jìn)行判斷。這種方法就是集成學(xué)習(xí)。
綜上,集成學(xué)習(xí)就是將多個(gè)學(xué)習(xí)器結(jié)合起來(lái)構(gòu)成一個(gè)總的更強(qiáng)的學(xué)習(xí)器。集成學(xué)習(xí)需要解決兩個(gè)問(wèn)題,第一個(gè)是如何得到多個(gè)的學(xué)習(xí)器,我們稱之為基學(xué)習(xí)器;第二個(gè)是得到了多個(gè)學(xué)習(xí)器后如何結(jié)合起來(lái)。
一般有兩類比較流行的集成方法,分別是Bagging和Boosting。Bagging的多個(gè)學(xué)習(xí)器之間沒(méi)有強(qiáng)關(guān)聯(lián),而且采用均值合并的集成方式;Boosting的多個(gè)學(xué)習(xí)器之間有強(qiáng)關(guān)聯(lián),而且采用加權(quán)平均的集成方式。
Bagging
Bagging,又叫做Bootstrap Aggregation,具體做法是,從從訓(xùn)練集中隨機(jī)抽取一部分樣本,使用適合的基學(xué)習(xí)器訓(xùn)練后,將樣本放回并重復(fù)抽取和訓(xùn)練的步驟,直至得到多個(gè)學(xué)習(xí)器后,對(duì)測(cè)試集數(shù)據(jù)進(jìn)行預(yù)測(cè),得到多個(gè)結(jié)果,通過(guò)均值合并的方式得到最終預(yù)測(cè)結(jié)果。
比如說(shuō)下圖的數(shù)據(jù)點(diǎn)。紅色是訓(xùn)練集,綠色是測(cè)試集。我們隨機(jī)選擇5個(gè)包含5個(gè)訓(xùn)練集樣本點(diǎn)的子集,然后計(jì)算三階多項(xiàng)式擬合曲線。得到5條曲線后,進(jìn)行均值合并得到圖示的紅色表示出來(lái)的三階多項(xiàng)式曲線。而藍(lán)色表示的是按照線性回歸得到的四階多項(xiàng)式擬合曲線。相比較兩者后發(fā)現(xiàn),雖然藍(lán)色線比紅色線在訓(xùn)練集上的表現(xiàn)更好,但是紅色線在測(cè)試集上的表現(xiàn)更好。這是因?yàn)?,紅色線所代表的集成方法通過(guò)隨機(jī)選擇不同子集的數(shù)據(jù)進(jìn)行均值合并,避免了受到訓(xùn)練集個(gè)別數(shù)據(jù)的影響而產(chǎn)生的過(guò)擬合。

Bagging模型中典型的代表是隨機(jī)森林(RandomForest,RF)模型。
Boosting
Boosting的中心思想是選擇“難”的數(shù)據(jù),集成則是用到加權(quán)平均。與Bagging相比,這里的基學(xué)習(xí)器存在強(qiáng)關(guān)聯(lián),后一個(gè)基學(xué)習(xí)器是基于前一個(gè)基學(xué)習(xí)器的。Boosting選擇“難”數(shù)據(jù)的過(guò)程,就是基于上一個(gè)基學(xué)習(xí)器,對(duì)預(yù)測(cè)結(jié)果不好的數(shù)據(jù)增加權(quán)重,來(lái)構(gòu)造下一個(gè)基學(xué)習(xí)器。
在介紹具體做法前,先認(rèn)識(shí)兩個(gè)概念。
誤差
在之前的線性回歸等模型中,評(píng)價(jià)指標(biāo)是使用預(yù)測(cè)值與實(shí)際值之間的誤差的平方和計(jì)算得出。并不會(huì)考慮每個(gè)預(yù)測(cè)樣本的權(quán)重,或者說(shuō)每個(gè)預(yù)測(cè)樣本的權(quán)重都是一樣的。這里的誤差概念考慮了樣本的權(quán)重,權(quán)重系數(shù)定義為:
比如說(shuō)有四個(gè)數(shù)據(jù)點(diǎn),其中兩個(gè)預(yù)測(cè)有誤差,分配的權(quán)重都是1/20,那么這個(gè)值就是1/10。如果不考慮權(quán)重,而是1/2。
弱學(xué)習(xí)器(Weak Learner)
弱學(xué)習(xí)器的定義是,不管權(quán)重分布如何,學(xué)習(xí)器得到的結(jié)果都會(huì)不小于1/2。即
結(jié)合上面的誤差和弱學(xué)習(xí)器的定義,我們可以寫(xiě)出Boosting的偽代碼為:
給定數(shù)據(jù)集,
,
,對(duì)于每一個(gè)時(shí)間步
,構(gòu)建一個(gè)數(shù)據(jù)的權(quán)重分布
,尋找弱學(xué)習(xí)器
,使得
。最后輸出
。
其中,數(shù)據(jù)的權(quán)重分布具體做法是:首先設(shè)置
,然后令
,其中
,其中
是一個(gè)歸一化因子。
最終輸出則是基于
的加權(quán)平均,定義為
上述具體的推導(dǎo)可以參考這篇論文的介紹:
http://ww.web.stanford.edu/~hastie/Papers/SII-2-3-A8-Zhu.pdf
大概意思就是,boosting在每一輪構(gòu)建基學(xué)習(xí)器時(shí),都會(huì)用上所有的訓(xùn)練集數(shù)據(jù)。一開(kāi)始給出初始均等的權(quán)重假設(shè)進(jìn)行學(xué)習(xí),然后每一輪構(gòu)建的基學(xué)習(xí)器,通過(guò)計(jì)算可以得到相應(yīng)的預(yù)測(cè)結(jié)果、誤差。然后將學(xué)習(xí)器、預(yù)測(cè)結(jié)果和誤差作為輸入給到下一輪的基學(xué)習(xí)器的構(gòu)建。這個(gè)時(shí)候,預(yù)測(cè)結(jié)果差的會(huì)相應(yīng)地加大權(quán)重進(jìn)行學(xué)習(xí)。最后,根據(jù)各個(gè)基學(xué)習(xí)器的預(yù)測(cè)結(jié)果按照具體定義的權(quán)重系數(shù)進(jìn)行加權(quán)平均。然后將得到的結(jié)果輸入到一個(gè)閾值函數(shù),得到一個(gè)相應(yīng)的類別。
比如說(shuō),對(duì)下圖方形區(qū)域的數(shù)據(jù)點(diǎn)進(jìn)行分類,分別進(jìn)行了三次的基學(xué)習(xí)器學(xué)習(xí),最終可以得到一個(gè)“折線”形式的決策邊界,將數(shù)據(jù)點(diǎn)分隔開(kāi)來(lái)。

上述提到的模型可以參考sklearn的文檔和代碼說(shuō)明