機(jī)器學(xué)習(xí)筆記(14):集成學(xué)習(xí)

本文來(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ò)擬合。

image.png

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ù)定義為:

P_D(h(x) \neq c(x))

比如說(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。即
\forall D, \quad P(h(x) \neq c(x)) \leq \frac{1}{2} - \epsilon

結(jié)合上面的誤差和弱學(xué)習(xí)器的定義,我們可以寫(xiě)出Boosting的偽代碼為:
給定數(shù)據(jù)集{(x_i, y_i)},i=1,2,\ldots, ny_i \in (-1, 1),對(duì)于每一個(gè)時(shí)間步t \in (1, T),構(gòu)建一個(gè)數(shù)據(jù)的權(quán)重分布D_t,尋找弱學(xué)習(xí)器h_t(x),使得\epsilon_t=P_{D_t}(h_t(x) \neq y_c)。最后輸出H_{final}。

其中,數(shù)據(jù)的權(quán)重分布D_t具體做法是:首先設(shè)置D_1= \frac{1}{n},然后令D_{t+1}=\frac{D_t e^{-\alpha_t y_i h_t(x_i)}}{z_t},其中\alpha_t=\frac{1}{2} ln \frac{1-\epsilon_t}{\epsilon_t},其中z_t是一個(gè)歸一化因子。

最終輸出H_{final}則是基于\alpha_t的加權(quán)平均,定義為H_{final}=sgn(\sum_t \alpha_t h_t(x))

上述具體的推導(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)。

image.png

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

https://scikit-learn.org/stable/modules/ensemble.html#

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容