三種集成學(xué)習(xí)算法原理及核心公式推導(dǎo)
導(dǎo)讀
本文主要介紹3種集成學(xué)習(xí)算法的原理及重要公式推導(dǎo)部分,包括隨機(jī)森林(Random Forest)、自適應(yīng)提升(AdaBoost)、梯度提升(Gradient Boosting)。僅對(duì)重點(diǎn)理論和公式推導(dǎo)環(huán)節(jié)做以簡(jiǎn)要介紹。

集成學(xué)習(xí)3大流派
在經(jīng)典機(jī)器學(xué)習(xí)場(chǎng)景下,當(dāng)單個(gè)學(xué)習(xí)模型性能不足以有效滿足算法精度時(shí),人們開(kāi)始向集成學(xué)習(xí)模型發(fā)力——其思想和出發(fā)點(diǎn)很直觀,就是三個(gè)臭皮匠賽過(guò)諸葛亮。進(jìn)一步地,根據(jù)這三個(gè)臭皮匠在致力于賽過(guò)諸葛亮期間的協(xié)作模式不同,集成學(xué)習(xí)又細(xì)分為bagging和boosting兩大學(xué)派,其中前者是并行模式,意味著三個(gè)臭皮匠各搞各的然后將最后結(jié)果進(jìn)行融合以期帶來(lái)提升,這里bagging是一個(gè)合成詞匯,本意為booststrap aggregating;后者是串行模型,先讓一個(gè)臭皮匠去探探底,根據(jù)反饋結(jié)果再派第二個(gè)、第三個(gè),頗有些車輪戰(zhàn)的味道。進(jìn)一步的,車輪戰(zhàn)還可以根據(jù)具體戰(zhàn)術(shù)落腳點(diǎn)的不同,而分為Adaboost和GB,其中AdaBoost算法中各個(gè)臭皮匠的迭代重點(diǎn)在于不斷彌補(bǔ)自己的過(guò)失/錯(cuò)誤的地方,而GB算法中各個(gè)臭皮匠的迭代重點(diǎn)在于不斷彌補(bǔ)自己與諸葛亮/理想型的差距,或者說(shuō)殘差。
當(dāng)然,除了bagging和boosting兩大流派之外,其實(shí)集成學(xué)習(xí)還有第三大流派——stacking,從其名字可以看出端倪是有些堆棧的意味,其實(shí)質(zhì)就是將前一輪學(xué)習(xí)之后的輸出/標(biāo)簽組織變換后作為下一輪學(xué)習(xí)的輸入/特征,然后再次訓(xùn)練。其實(shí)就是深度學(xué)習(xí)那一套……
隨機(jī)森林是典型的bagging流派集成學(xué)習(xí)算法,個(gè)人非常喜歡這個(gè)算法的名字:森林二字可以窺探出這個(gè)算法是源于決策樹(shù),當(dāng)以多棵樹(shù)作為弱學(xué)習(xí)器,那么組成的集成學(xué)習(xí)算法自然叫做森林最合適;而隨機(jī)二字則形象的體現(xiàn)其在構(gòu)建每棵決策樹(shù)時(shí),實(shí)際上是采取了隨機(jī)采樣的方式來(lái)確保各弱學(xué)習(xí)器結(jié)果的多樣性。至于為什么要保證多樣性,稍后的公式推導(dǎo)可以說(shuō)明這一點(diǎn)。
這里,既然說(shuō)隨機(jī)森林是bagging流派的典型代表,那么言外之意就是還存在其他bagging算法,實(shí)際也正是如此。廣義來(lái)講,bagging流派集成學(xué)習(xí)算法可分為4類,主要差別主要源于采樣方式的不同:
僅對(duì)樣本維度(體現(xiàn)為行采樣)進(jìn)行采樣,且采樣是有放回的,意味著每個(gè)弱學(xué)習(xí)器的K個(gè)采樣樣本中可能存在重復(fù)的樣本,此時(shí)對(duì)應(yīng)bagging算法,這里bagging=bootstrap aggregating。發(fā)現(xiàn),這個(gè)具體算法的名字與bagging流派的名字重合,這并不意外,因?yàn)檫@是bagging中一種經(jīng)典的采樣方式,因而以其作為流派的名字。當(dāng)然,bagging既是一種算法也是流派名,那就要看是狹義還是廣義的bagging來(lái)加以區(qū)分了
僅對(duì)樣本維度采樣,但采樣是無(wú)放回的,意味著對(duì)于每個(gè)弱學(xué)習(xí)器的K個(gè)采樣樣本是完全不同的,由于相當(dāng)于是每執(zhí)行一次采樣,則該樣本就被舍棄掉(pass),所以此時(shí)算法叫做pasting
前兩者的隨機(jī)性均來(lái)源于樣本維度的隨機(jī)采樣,也就是行方向上,那么對(duì)于列方向上進(jìn)行隨機(jī)采樣是否也可以呢?比如說(shuō)每個(gè)弱學(xué)習(xí)器都選用所有的樣本參與訓(xùn)練,但各學(xué)習(xí)器選取參與訓(xùn)練的特征是不一致的,訓(xùn)練出的算法自然也是具有隨機(jī)性的,可以滿足集成的要求。此時(shí),對(duì)應(yīng)算法叫做subspaces,中文譯作子空間,具體說(shuō)是特征維度的子空間,名字還是比較傳神的
發(fā)現(xiàn),既有樣本維度的隨機(jī),也有特征維度的隨機(jī),那么自然想到有沒(méi)有兼顧二者的隨機(jī)呢,也就是說(shuō)每個(gè)弱學(xué)習(xí)器既執(zhí)行行采樣、也有列采樣,得到的弱學(xué)習(xí)器其算法隨機(jī)性應(yīng)該更強(qiáng)。當(dāng)然,這種算法被稱作是patches,比如前文已經(jīng)提到的隨機(jī)森林就屬于這種。實(shí)際上,隨機(jī)森林才是最為廣泛使用的bagging流派集成學(xué)習(xí)算法
發(fā)散一下,其實(shí)bagging算法無(wú)非就是區(qū)分到底是行采樣、列采樣還是行列采樣,那為什么會(huì)出來(lái)4種呢?原來(lái)是行采樣在采樣執(zhí)行過(guò)程中又細(xì)分了是否有放回。那既然行采樣可以區(qū)分是否有放回,列采樣是否也可區(qū)分一下衍生出兩種具體算法呢?實(shí)際上是不可以的,因?yàn)樘卣鞯挠蟹呕匾馕吨卣髦貜?fù),在機(jī)器學(xué)習(xí)訓(xùn)練過(guò)程中重復(fù)的特征或者說(shuō)復(fù)制特征參與訓(xùn)練不能帶來(lái)學(xué)習(xí)效果的改變;但樣本的重復(fù)或者說(shuō)復(fù)制則能帶來(lái)學(xué)習(xí)效果的差異,因?yàn)檫@直接帶來(lái)算法訓(xùn)練樣本的類別平衡性,自然影響訓(xùn)練結(jié)果。
bagging算法原理非常簡(jiǎn)單易懂,算法出發(fā)點(diǎn)也非常樸素,其中涉及到的公式推導(dǎo)也不多,主要需要理解以下三個(gè)要點(diǎn):
有放回采樣中,預(yù)計(jì)有36.8%的樣本不會(huì)被用于訓(xùn)練,也就意味著這些樣本可以天然的作為測(cè)試集用于評(píng)估集成學(xué)習(xí)模型效果。36.8%是如何而來(lái)呢?設(shè)樣本數(shù)量為N,則對(duì)任意樣本而言在1次采樣中不被抽中的概率為 1 - 1/N,在N次采樣中均未被抽中的概率則為
bagging流派的各種算法中,一直在強(qiáng)調(diào)每個(gè)弱學(xué)習(xí)器訓(xùn)練效果之間的隨機(jī)性,或者說(shuō)差異性,那么為什么要保證這種差異性呢?直觀來(lái)看,把集成學(xué)習(xí)比作是一次考試,A同學(xué)在參考了周邊的BCD3名同學(xué)答案的基礎(chǔ)上做判斷,如果BCD3人的答案都是一樣的,正確的都正確,錯(cuò)誤的都錯(cuò)誤,那么A同學(xué)的在綜合3人答案之后絲毫不會(huì)對(duì)最終結(jié)果帶來(lái)任何提升,仍然是BCD三人的正確率。而只有當(dāng)3人擅長(zhǎng)的考點(diǎn)不一樣得出的答案也不盡相同時(shí),A綜合之后才可能帶來(lái)提升。具體到其中一道題,用數(shù)學(xué)語(yǔ)言描述就是:設(shè)BCD三人答對(duì)的概率分別為Pb、Pc、Pd,如果三人答案的正確與否是獨(dú)立事件,那么A本著少數(shù)服從多數(shù)的原則,得到正確答案的概率為PbPc(1-Pd) +?(1-Pb)PcPd + Pb(1-Pc)Pd + PbPcPd;反之,如果三人答案的正確與否是相關(guān)聯(lián)的事件,即同時(shí)正確或錯(cuò)誤,那么A的最終正確率其實(shí)是不變的。所以,bagging流派要求集成學(xué)習(xí)各弱學(xué)習(xí)器之間要求算法盡可能是隨機(jī)的,同時(shí)也有準(zhǔn)確率的最低要求,即不能低于50%,否則會(huì)對(duì)集成效果帶來(lái)負(fù)作用
bagging流派將帶來(lái)算法的低方差,但不會(huì)降低偏差。衡量機(jī)器學(xué)習(xí)模型效果時(shí),往往需要考慮偏差和方差兩方面因素,偏差意味著模型訓(xùn)練效果距離理想目標(biāo)還有很大差距,常常效果很差;方差意味著模型訓(xùn)練效果時(shí)好時(shí)壞,雖然有時(shí)候效果很好,但不夠穩(wěn)定,二者的形象描述示意如下圖所示。那么,當(dāng)我們說(shuō)bagging集成學(xué)習(xí)相較于單個(gè)弱學(xué)習(xí)器效果有所提升,具體是指哪方面有所提升呢,換言之是降低了偏差還是方差呢?答案是偏差不變,方差降低。這可以由以下兩個(gè)公式意會(huì)的表達(dá):
當(dāng)然,以上兩個(gè)公式也僅可意會(huì)的表達(dá)集成學(xué)習(xí)效果的提升,而不能具體刻畫。實(shí)際中的bagging算法當(dāng)然是會(huì)帶來(lái)偏差的降低,只是統(tǒng)計(jì)意義下的均值與弱學(xué)習(xí)器效果相當(dāng),具體如何降低偏差那就需要具體問(wèn)題具體調(diào)參了!

理解機(jī)器學(xué)習(xí)方差和偏差
圖片源于《Understanding the Bias-Variance Tradeoff 2012》一文
原文鏈接:http://scott.fortmann-roe.com/docs/BiasVariance.html
此外,bagging流派由于是并行訓(xùn)練多個(gè)模型,而后綜合各個(gè)弱學(xué)習(xí)器的效果進(jìn)行綜合決策,那么綜合決策的方式其實(shí)也是一個(gè)值得探討的問(wèn)題。簡(jiǎn)言之,就是hard voting和soft voting兩種方式,以二分類問(wèn)題為例,前者是直接統(tǒng)計(jì)所有弱學(xué)習(xí)器的結(jié)果,然后取其中結(jié)果最多的那一類作為最終結(jié)果;而后者則不是直接統(tǒng)計(jì)結(jié)果,而是統(tǒng)計(jì)各弱學(xué)習(xí)器的分類概率,并分別計(jì)算所有弱學(xué)習(xí)器中兩類的概率之和,以概率之和較大者作為最終結(jié)果。具體不再贅述。
與bagging流派集成學(xué)習(xí)思想不同,boosting流派側(cè)重于后人站在前人的肩膀上看問(wèn)題,Adaboost和GB概莫能外。當(dāng)然,雖然理論上最后一個(gè)弱學(xué)習(xí)器在綜合了所有前人的經(jīng)驗(yàn)基礎(chǔ)上可能會(huì)具有最好的性能,但Adaboost也不是簡(jiǎn)單的以最后的弱學(xué)習(xí)器結(jié)果為準(zhǔn),而是仍然加權(quán)考慮所有弱學(xué)習(xí)器的結(jié)果。
前文提到,Adaboost算法在吸取前一個(gè)弱學(xué)習(xí)器訓(xùn)練效果的基礎(chǔ)上,重點(diǎn)關(guān)注錯(cuò)誤的樣本從而針對(duì)性的執(zhí)行后續(xù)訓(xùn)練過(guò)程,具體說(shuō)就是加大前一輪訓(xùn)練錯(cuò)的樣本權(quán)重。
以二分類為例,Adaboost算法核心算法原理(公式推導(dǎo)):
損失函數(shù):指數(shù)函數(shù),當(dāng)訓(xùn)練結(jié)果與真實(shí)標(biāo)簽一致時(shí)(乘積為正)損失較小,不一致時(shí)(乘積為負(fù))損失較大
m輪訓(xùn)練后的集成學(xué)習(xí)模型:前m個(gè)弱學(xué)習(xí)器的加權(quán)求和
m輪訓(xùn)練后的模型損失
其中em表示第m輪弱學(xué)習(xí)器的模型訓(xùn)練錯(cuò)誤率,根據(jù)錯(cuò)誤樣本的權(quán)重之和與總樣本的權(quán)重之和比值得出。當(dāng)然在樣本權(quán)重和進(jìn)行歸一化的基礎(chǔ)上,分母為1。
然后分析每輪訓(xùn)練弱學(xué)習(xí)器時(shí)的樣本權(quán)重迭代方式。再看損失函數(shù),每個(gè)樣本的損失可看做是兩部分的乘積形式,其中前一部分與第m輪訓(xùn)練的弱學(xué)習(xí)器Gm(X)無(wú)關(guān),而后一輪與其直接相關(guān),因而可將前一部分看做是樣本加權(quán)系數(shù)——這也正是不斷調(diào)整每一輪訓(xùn)練模型的樣本權(quán)重的根源所在。記第m輪訓(xùn)練弱學(xué)習(xí)器的第i個(gè)樣本的權(quán)重系數(shù)為:
則可進(jìn)一步發(fā)現(xiàn)權(quán)重的更新策略為:
也就是說(shuō),下一輪的樣本權(quán)重由前一輪樣本權(quán)重和前一輪的弱學(xué)習(xí)器訓(xùn)練結(jié)果有關(guān),進(jìn)一步地,當(dāng)前一輪訓(xùn)練結(jié)果與真實(shí)標(biāo)簽一致時(shí)樣本權(quán)重前的系數(shù)為小于1的值,體現(xiàn)為樣本權(quán)重降低;否則權(quán)重增大。當(dāng)然,在每輪更新后還需對(duì)樣本權(quán)重加和進(jìn)行歸一化處理。
與Adaboost算法類似,GB(梯度提升)集成學(xué)習(xí)算法也是基于多個(gè)弱學(xué)習(xí)器的訓(xùn)練效果的加權(quán)進(jìn)行最終判決,且每輪訓(xùn)練也基于前一輪訓(xùn)練效果進(jìn)行針對(duì)性的更新迭代。但與Adaboost聚焦于前一輪訓(xùn)練錯(cuò)誤的樣本機(jī)制不同,GB聚焦于前一輪訓(xùn)練后的殘差,相當(dāng)于是通過(guò)集成學(xué)習(xí)來(lái)了個(gè)算法接力,以使得最終學(xué)習(xí)效果不斷逼近真實(shí)水平。
對(duì)比f(wàn)m(X)的梯度和其迭代公式,可知第m輪訓(xùn)練的弱學(xué)習(xí)器實(shí)際上即為擬合當(dāng)前殘差的弱學(xué)習(xí)器,這也正是GB的核心思想。實(shí)際上,GB也被稱作是函數(shù)空間的梯度下降法。
這是GB集成學(xué)習(xí)算法的出發(fā)點(diǎn),也是理解不斷擬合殘差的核心。后續(xù)相關(guān)公式推導(dǎo)不再給出。

相關(guān)閱讀:
