一張圖介紹機(jī)器學(xué)習(xí)中的集成學(xué)習(xí)算法
導(dǎo)讀
機(jī)器學(xué)習(xí)在當(dāng)下早已成為一項熱門的技術(shù),在眾多機(jī)器學(xué)習(xí)算法中,除去深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)等最新發(fā)展方向,若是談及經(jīng)典機(jī)器學(xué)習(xí)算法,那么集成學(xué)習(xí)算法無論是在效果上還是熱度上都是當(dāng)之無愧的焦點。今天本文就來簡要介紹那些經(jīng)典的集成學(xué)習(xí)算法。

集成學(xué)習(xí)算法的三大派系
bagging,全稱即為bootstrap aggregating,主要是通過并行獨立地訓(xùn)練多個基學(xué)習(xí)器,而后采取投票或加權(quán)的方式融合多個學(xué)習(xí)結(jié)果,以期得到更為精準(zhǔn)的結(jié)果,三個臭皮匠賽過諸葛亮就是這個道理; boosting,翻譯過來即為提升的意思,是采取串行的方式逐一提升學(xué)習(xí)效果的方式,頗有后人站在前面巨人肩膀上的意味; stacking,"stack"是數(shù)據(jù)結(jié)構(gòu)與算法中棧的英文,用在這里即表達(dá)集成的方式其實也隱藏了先后和遞進(jìn)的思想,不同于boosting的是:stacking是將眾多基學(xué)習(xí)器的結(jié)果作為輸入實現(xiàn)再訓(xùn)練的過程,有些類似于多層神經(jīng)網(wǎng)絡(luò)的思想。
僅對樣本維度(體現(xiàn)為行采樣)進(jìn)行采樣,且采樣是有放回的,意味著每個弱學(xué)習(xí)器的K個采樣樣本中可能存在重復(fù)的樣本,此時對應(yīng)bagging算法,這里bagging=bootstrap aggregating。發(fā)現(xiàn),這個具體算法的名字與bagging流派的名字重合,這并不意外,因為這是bagging中一種經(jīng)典的采樣方式,因而以其作為流派的名字。當(dāng)然,bagging既是一種算法也是流派名,那就要看是狹義還是廣義的bagging來加以區(qū)分了 僅對樣本維度采樣,但采樣是無放回的,意味著對于每個弱學(xué)習(xí)器的K個采樣樣本是完全不同的,由于相當(dāng)于是每執(zhí)行一次采樣,則該樣本就被舍棄掉(pass),所以此時算法叫做pasting 前兩者的隨機(jī)性均來源于樣本維度的隨機(jī)采樣,也就是行方向上,那么對于列方向上進(jìn)行隨機(jī)采樣是否也可以呢?比如說每個弱學(xué)習(xí)器都選用所有的樣本參與訓(xùn)練,但各學(xué)習(xí)器選取參與訓(xùn)練的特征是不一致的,訓(xùn)練出的算法自然也是具有隨機(jī)性的,可以滿足集成的要求。此時,對應(yīng)算法叫做subspaces,中文譯作子空間,具體說是特征維度的子空間,名字還是比較傳神的 發(fā)現(xiàn),既有樣本維度的隨機(jī),也有特征維度的隨機(jī),那么自然想到有沒有兼顧二者的隨機(jī)呢,也就是說每個弱學(xué)習(xí)器既執(zhí)行行采樣、也有列采樣,得到的弱學(xué)習(xí)器其算法隨機(jī)性應(yīng)該更強(qiáng)。當(dāng)然,這種算法被稱作是patches,比如前文已經(jīng)提到的隨機(jī)森林就屬于這種。實際上,隨機(jī)森林才是最為廣泛使用的bagging流派集成學(xué)習(xí)算法。
如果說bagging的基本套路是以多取勝,那么boosting的基本套路則是車輪戰(zhàn)!即boosting采取逐個基學(xué)習(xí)器遞進(jìn)訓(xùn)練的方式進(jìn)行,通過不斷彌補(bǔ)前面基學(xué)習(xí)器存在的短板和問題,來實現(xiàn)最終整體效果上的提升。這里,針對彌補(bǔ)短板的不同,boosting其實也存在兩大方法:
Adaboost:針對前一輪預(yù)測錯誤的樣本,不斷加強(qiáng)對這些易錯樣本的權(quán)重,具體是通過對各樣本分配不同的權(quán)重系數(shù)來實現(xiàn)。這就好比說一個學(xué)生能夠針對歷次學(xué)習(xí)考試建立自己的錯題集,來實現(xiàn)有的放矢的提高;
GBDT:不斷彌補(bǔ)前面訓(xùn)練的差距,實現(xiàn)整體效果上的逼近,具體是將真實值與預(yù)測值的差值等效為梯度的方法實現(xiàn)提升。
二者都是針對前一輪訓(xùn)練的弱點,加以針對性的彌補(bǔ)以實現(xiàn)訓(xùn)練得到更好的學(xué)習(xí)器。方法論是一致的,但當(dāng)下的發(fā)展熱門程度則天差地別。目前來看,Adaboost應(yīng)用場合相對較為有限,并大有逐漸淡出大眾視野的趨勢,而GBDT的思想則更為火熱,并日益衍生更多的迭代改進(jìn)版本,例如當(dāng)下最火熱的三大集成學(xué)習(xí)算法就都是基于GBDT的改進(jìn)提升:
Xgboost,這是對GBDT的第一個改進(jìn),源于AI大神陳天齊(本科是上海交大ACM畢業(yè)),與GBDT最大的差異在于對目標(biāo)函數(shù)的改進(jìn)(本質(zhì)上是taylor一級展開到二級展開的改進(jìn)),另有一些工程實現(xiàn)上的差異;
Lightgbm,這是在Xgboost的基礎(chǔ)上做的進(jìn)一步改進(jìn),源于微軟團(tuán)隊。正如其名字中的light一樣,lightgbm本質(zhì)上是在達(dá)到與xgboost相近效果的基礎(chǔ)上,大幅提高訓(xùn)練速度,這其中得益于三項算法或機(jī)制:①數(shù)值維度上,進(jìn)行了基于直方圖統(tǒng)計的分箱處理,簡化了數(shù)據(jù)存儲和分裂點的選??;②樣本維度上,采取了單邊梯度采樣算法,避免低梯度樣本的計算量;③特征維度上,采用了互斥特征捆綁(好吧,這個名字著實拗口),就是對多個稀疏特征進(jìn)行合并,實現(xiàn)特征數(shù)量的降維。此外,Lightgbm與Xgboost的另一個顯著區(qū)別是采用了leaf-wise的決策樹生長策略,確保每次分裂都是有意義的;
Catboost,出道時間要略晚于Lightgbm,源于俄羅斯互聯(lián)網(wǎng)巨頭Yandex,其實也是對Xgboost的改進(jìn),最大不同是原生支持Cat型特征而無需轉(zhuǎn)化為數(shù)值,另外也支持對缺失值的自動處理。不過在競賽中的應(yīng)用并不是很多。
從另一個角度來看,這三種算法也可視做分別源于中、美、俄……好吧,大國之爭果真無處不在!
Stacking的思想其實可視為bagging+boosting的混合體,即先并行訓(xùn)練多個基學(xué)習(xí)器,而后以多個基學(xué)習(xí)器的訓(xùn)練結(jié)果為特征數(shù)據(jù),進(jìn)一步訓(xùn)練第二階段的學(xué)習(xí)器,以期得到更為精準(zhǔn)的結(jié)果。當(dāng)然,照此流程,其實還可以訓(xùn)練第三波第四波,這就真的好似深度神經(jīng)網(wǎng)絡(luò)了……不過,可能也正因為其思想過于貼近于深度神經(jīng)網(wǎng)絡(luò),所以Stacking方式的集成學(xué)習(xí)其實并未得到廣泛應(yīng)用。

相關(guān)閱讀:
