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

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

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