????????一般來(lái)說(shuō),通過(guò)融合多個(gè)不同的模型,可能提升機(jī)器學(xué)習(xí)的性能,這一方法在各種機(jī)器學(xué)習(xí)比賽中廣泛應(yīng)用,比如在kaggle上的otto產(chǎn)品分類(lèi)挑戰(zhàn)賽①中取得冠軍和亞軍成績(jī)的模型都是融合了1000+模型的“龐然大物”。
????????常見(jiàn)的集成學(xué)習(xí)&模型融合方法包括:簡(jiǎn)單的Voting/Averaging(分別對(duì)于分類(lèi)和回歸問(wèn)題)、Stacking、Boosting和Bagging。
-->Voting/Averaging
????????在不改變模型的情況下,直接對(duì)各個(gè)不同的模型預(yù)測(cè)的結(jié)果,進(jìn)行投票或者平均,這是一種簡(jiǎn)單卻行之有效的融合方式。
????????比如對(duì)于分類(lèi)問(wèn)題,假設(shè)有三個(gè)相互獨(dú)立的模型,每個(gè)正確率都是70%,采用少數(shù)服從多數(shù)的方式進(jìn)行投票。那么最終的正確率將是:
????????即結(jié)果經(jīng)過(guò)簡(jiǎn)單的投票,使得正確率提升了8%。這是一個(gè)簡(jiǎn)單的概率學(xué)問(wèn)題——如果進(jìn)行投票的模型越多,那么顯然其結(jié)果將會(huì)更好。但是其前提條件是模型之間相互獨(dú)立,結(jié)果之間沒(méi)有相關(guān)性。越相近的模型進(jìn)行融合,融合效果也會(huì)越差。
????????比如對(duì)于一個(gè)正確輸出全為1的測(cè)試,我們有三個(gè)很相近的的預(yù)測(cè)結(jié)果,分別為:
進(jìn)行投票其結(jié)果為:
而假如我們的各個(gè)預(yù)測(cè)結(jié)果之間有很大差異:
其投票結(jié)果將為:
????????可見(jiàn)模型之間差異越大,融合所得的結(jié)果將會(huì)更好。//這種特性不會(huì)受融合方式的影響。注意這里所指模型之間的差異,并不是指正確率的差異,而是指模型之間相關(guān)性的差異。
? ??????對(duì)于回歸問(wèn)題,對(duì)各種模型的預(yù)測(cè)結(jié)果進(jìn)行平均,所得到的結(jié)果通過(guò)能夠減少過(guò)擬合,并使得邊界更加平滑,單個(gè)模型的邊界可能很粗糙。這是很直觀的性質(zhì),隨便放張圖②就不另外詳細(xì)舉例了。
????????在上述融合方法的基礎(chǔ)上,一個(gè)進(jìn)行改良的方式是對(duì)各個(gè)投票者/平均者分配不同的權(quán)重以改變其對(duì)最終結(jié)果影響的大小。對(duì)于正確率低的模型給予更低的權(quán)重,而正確率更高的模型給予更高的權(quán)重。這也是可以直觀理解的——想要推翻專(zhuān)家模型(高正確率模型)的唯一方式,就是臭皮匠模型(低正確率模型)同時(shí)投出相同選項(xiàng)的反對(duì)票。具體的對(duì)于權(quán)重的賦值,可以用正確率排名的正則化等。
????????這種方法看似簡(jiǎn)單,但是卻是下面各種“高級(jí)”方法的基礎(chǔ)。
-->Boosting
????????Boosting是一種將各種弱分類(lèi)器串聯(lián)起來(lái)的集成學(xué)習(xí)方式,每一個(gè)分類(lèi)器的訓(xùn)練都依賴(lài)于前一個(gè)分類(lèi)器的結(jié)果,順序運(yùn)行的方式導(dǎo)致了運(yùn)行速度慢。和所有融合方式一樣,它不會(huì)考慮各個(gè)弱分類(lèi)器模型本身結(jié)構(gòu)為何,而是對(duì)訓(xùn)練數(shù)據(jù)(樣本集)和連接方式進(jìn)行操縱以獲得更小的誤差。但是為了將最終的強(qiáng)分類(lèi)器的誤差均衡,之前所選取的分類(lèi)器一般都是相對(duì)比較弱的分類(lèi)器,因?yàn)橐坏┠硞€(gè)分類(lèi)器較強(qiáng)將使得后續(xù)結(jié)果受到影響太大。所以多用于集成學(xué)習(xí)而非模型融合(將多個(gè)已經(jīng)有較好效果的模型融合成更好的模型)。
????????這里引用知乎專(zhuān)欄 《【機(jī)器學(xué)習(xí)】模型融合方法概述》③處引用的加州大學(xué)歐文分校Alex Ihler教授的兩頁(yè)P(yáng)PT:
????????其基本工作機(jī)制如下:
? ? ? ? 1、從初始樣本集中訓(xùn)練出一個(gè)基學(xué)習(xí)器;
? ? ? ? 2、根據(jù)基學(xué)習(xí)器的表現(xiàn)對(duì)樣本集分布進(jìn)行調(diào)整,使得做錯(cuò)的樣本能在之后的過(guò)程中受到更多的關(guān)注;
? ? ? ? 3、用調(diào)整后的樣本集訓(xùn)練下一個(gè)基學(xué)習(xí)器;
? ? ? ? 4、重復(fù)上述步驟,直到滿(mǎn)足一定條件。
? ??????注意,一般只有弱分類(lèi)器都是同一種分類(lèi)器(即同質(zhì)集成)的時(shí)候,才將弱分類(lèi)器稱(chēng)為基學(xué)習(xí)器,如果是異質(zhì)集成,則稱(chēng)之為個(gè)體學(xué)習(xí)器。由于不是本文重點(diǎn),所以此處不作區(qū)分。特此說(shuō)明。
????????最終將這些弱分類(lèi)器進(jìn)行加權(quán)相加。
????????常見(jiàn)的Boosting方法有Adaboost、GBDT、XGBOOST等。 //下面僅從思想層次上簡(jiǎn)單介紹各種方法,具體的算法推理公式推導(dǎo)以及可用的工具包等參考本文附錄。
-->Bagging
????????Bagging是Bootstrap?Aggregating的縮寫(xiě)。這種方法同樣不對(duì)模型本身進(jìn)行操作,而是作用于樣本集上。采用的是隨機(jī)有放回的選擇訓(xùn)練數(shù)據(jù)然后構(gòu)造分類(lèi)器,最后進(jìn)行組合。與Boosting方法中各分類(lèi)器之間的相互依賴(lài)和串行運(yùn)行不同,Bagging方法中基學(xué)習(xí)器之間不存在強(qiáng)依賴(lài)關(guān)系,且同時(shí)生成并行運(yùn)行。
????????其基本思路為:
? ? ? ? 1、在樣本集中進(jìn)行K輪有放回的抽樣,每次抽取n個(gè)樣本,得到K個(gè)訓(xùn)練集;
? ? ? ? 2、分別用K個(gè)訓(xùn)練集訓(xùn)練得到K個(gè)模型。
? ? ? ? 3、對(duì)得到的K個(gè)模型預(yù)測(cè)結(jié)果用投票或平均的方式進(jìn)行融合。
? ??????在這里,訓(xùn)練集的選取可能不會(huì)包含所有樣本集,未被包含的數(shù)據(jù)成為包/袋外數(shù)據(jù),可用來(lái)進(jìn)行包外誤差的泛化估計(jì)。每個(gè)模型的訓(xùn)練過(guò)程中,每次訓(xùn)練集可以取全部的特征進(jìn)行訓(xùn)練,也可以隨機(jī)選取部分特征訓(xùn)練,例如極有代表性的隨機(jī)森林算法就是每次隨機(jī)選取部分特征。
????????下面僅從思想層面介紹隨機(jī)森林算法:
? ? ? ? 1、在樣本集中進(jìn)行K輪有放回的抽樣,每次抽取n個(gè)樣本,得到K個(gè)訓(xùn)練集,其中n一般遠(yuǎn)小于樣本集總數(shù);
? ? ? ? 2、選取訓(xùn)練集,在整體特征集M中選取部分特征集m構(gòu)建決策樹(shù),其中m一般遠(yuǎn)小于M;
? ? ? ? 3、在構(gòu)造每棵決策樹(shù)的過(guò)程中,按照選取最小的基尼指數(shù)進(jìn)行分裂節(jié)點(diǎn)的選取進(jìn)行決策樹(shù)的構(gòu)建。決策樹(shù)的其他結(jié)點(diǎn)都采取相同的分裂規(guī)則進(jìn)行構(gòu)建,直到該節(jié)點(diǎn)的所有訓(xùn)練樣例都屬于同一類(lèi)或者達(dá)到樹(shù)的最大深度;
? ? ? ? 4、重復(fù)上述步驟,得到隨機(jī)森林;
? ? ? ? 5、多棵決策樹(shù)同時(shí)進(jìn)行預(yù)測(cè),對(duì)結(jié)果進(jìn)行投票或平均得到最終的分類(lèi)結(jié)果。
????????多次隨機(jī)選擇的過(guò)程,使得隨機(jī)森林不容易過(guò)擬合且有很好的抗干擾能力。
-->Boosting與Bagging的比較④
優(yōu)化方式上>
? ??????在機(jī)器學(xué)習(xí)中,我們訓(xùn)練一個(gè)模型通常是將定義的Loss最小化的過(guò)程。但是單單的最小化loss并不能保證模型在解決一般化的問(wèn)題時(shí)能夠最優(yōu),甚至不能保證模型可用。訓(xùn)練數(shù)據(jù)集的Loss與一般化數(shù)據(jù)集的Loss之間的差異被稱(chēng)為generalization error。
????????Variance過(guò)大會(huì)導(dǎo)致模型過(guò)擬合,而B(niǎo)ias過(guò)大會(huì)使得模型欠擬合。
? ? ?????Bagging方法主要通過(guò)降低Variance來(lái)降低error,Boosting方法主要通過(guò)降低Bias來(lái)降低error。
????????Bagging方法采用多個(gè)不完全相同的訓(xùn)練集訓(xùn)練多個(gè)模型,最后結(jié)果取平均。由于
????????所以最終結(jié)果的Bias與單個(gè)模型的Bias相近,一般不會(huì)顯著降低Bias。????
????????另一方面,對(duì)于Variance則有:
????????Bagging的多個(gè)子模型由不完全相同的數(shù)據(jù)集訓(xùn)練而成,所以子模型間有一定的相關(guān)性但又不完全獨(dú)立,所以其結(jié)果在上述兩式的中間狀態(tài)。因此可以在一定程度上降低Variance從而使得總error減小。
????????Boosting方法從優(yōu)化角度來(lái)說(shuō),是用forward-stagewise這種貪心法去最小化損失函數(shù)
。所謂forward-stagewise,就是在迭代的第n步,求解新的子模型f(x)及步長(zhǎng)a(或者稱(chēng)組合系數(shù)),來(lái)最小化
,這里
是前n步得到的子模型的和。因此Boosting在最小化損失函數(shù),Bias自然逐步下降,而由于模型間強(qiáng)相關(guān),不能顯著降低Variance。
????????Bagging里面每個(gè)分類(lèi)器是強(qiáng)分類(lèi)器,因?yàn)樗档偷氖欠讲睿讲钸^(guò)高需要降低是過(guò)擬合。
????????boosting里面每個(gè)分類(lèi)器是弱分類(lèi)器,因?yàn)樗档偷氖瞧睿钸^(guò)高是欠擬合。
樣本選擇上>
????????Bagging:訓(xùn)練集是在原始集中有放回選取的,從原始集中選出的各輪訓(xùn)練集之間是獨(dú)立的。
????????Boosting:每一輪的訓(xùn)練集不變,只是訓(xùn)練集中每個(gè)樣例在分類(lèi)器中的權(quán)重發(fā)生變化。而權(quán)值是根據(jù)上一輪的分類(lèi)結(jié)果進(jìn)行調(diào)整。
樣例權(quán)重>
????????Bagging:使用均勻取樣,每個(gè)樣例的權(quán)重相等
????????Boosting:根據(jù)錯(cuò)誤率不斷調(diào)整樣例的權(quán)值,錯(cuò)誤率越大則權(quán)重越大
預(yù)測(cè)函數(shù)>
????????Bagging:所有預(yù)測(cè)函數(shù)的權(quán)重相等。
????????Boosting:每個(gè)弱分類(lèi)器都有相應(yīng)的權(quán)重,對(duì)于分類(lèi)誤差小的分類(lèi)器會(huì)有更大的權(quán)重
并行計(jì)算>
????????Bagging:各個(gè)預(yù)測(cè)函數(shù)可以并行生成
????????Boosting:理論上各個(gè)預(yù)測(cè)函數(shù)只能順序生成,因?yàn)楹笠粋€(gè)模型參數(shù)需要前一輪模型的結(jié)果。計(jì)算角度來(lái)看,兩種方法都可以并行。bagging,random forest并行化方法顯而意見(jiàn)。boosting有強(qiáng)力工具stochastic gradient boosting
-->Stacking
“Here?be dragons. With 7 heads. Standing on top of 30 other dragons. ”
????????接下來(lái)介紹在各種機(jī)器學(xué)習(xí)比賽中被譽(yù)為“七頭龍神技”的Stacking方法。
? ??????(但因其模型的龐大程度與效果的提升程度往往不成正比,所以一般很難應(yīng)用于實(shí)際生產(chǎn)中)
? ??????下面以一種易于理解但不會(huì)實(shí)際使用的兩層的stacking方法為例,簡(jiǎn)要說(shuō)明其結(jié)構(gòu)和工作原理:(這種模型問(wèn)題將在后續(xù)說(shuō)明)
????????假設(shè)我們有三個(gè)基模型M1,M2,M3,用訓(xùn)練集對(duì)其進(jìn)行訓(xùn)練后,分別用來(lái)預(yù)測(cè)訓(xùn)練集和測(cè)試集的結(jié)果,得到P1,T1,P2,T2,P3,T3
????????這種方法的問(wèn)題在于,模型M1/2/3是我們用整個(gè)訓(xùn)練集訓(xùn)練出來(lái)的,我們又用這些模型來(lái)預(yù)測(cè)整個(gè)訓(xùn)練集的結(jié)果,毫無(wú)疑問(wèn)過(guò)擬合將會(huì)非常嚴(yán)重。因此在實(shí)際應(yīng)用中往往采用交叉驗(yàn)證的方法來(lái)解決過(guò)擬合問(wèn)題。
????????首先放幾張圖⑤,我們著眼于Stacking方法的第一層,以5折交叉驗(yàn)證為例說(shuō)明其工作原理:
1、首先我們將訓(xùn)練集分為五份。
2、對(duì)于每一個(gè)基模型來(lái)說(shuō),我們用其中的四份來(lái)訓(xùn)練,然后對(duì)未用來(lái)的訓(xùn)練的一份訓(xùn)練集和測(cè)試集進(jìn)行預(yù)測(cè)。然后改變所選的用來(lái)訓(xùn)練的訓(xùn)練集和用來(lái)驗(yàn)證的訓(xùn)練集,重復(fù)此步驟,直到獲得完整的訓(xùn)練集的預(yù)測(cè)結(jié)果。
3、對(duì)五個(gè)模型,分別進(jìn)行步驟2,我們將獲得5個(gè)模型,以及五個(gè)模型分別通過(guò)交叉驗(yàn)證獲得的訓(xùn)練集預(yù)測(cè)結(jié)果。即P1、P2、P3、P4、P5。
4、用五個(gè)模型分別對(duì)測(cè)試集進(jìn)行預(yù)測(cè),得到測(cè)試集的預(yù)測(cè)結(jié)果:T1、T2、T3、T4、T5。
5、將P1~5、T1~5作為下一層的訓(xùn)練集和測(cè)試集。在圖中分別作為了模型6的訓(xùn)練集和測(cè)試集。
????????Stacking方法的整體結(jié)構(gòu)如下圖所示:
-->Blending
????????Blending是一種和Stacking很相像的模型融合方式,它與Stacking的區(qū)別在于訓(xùn)練集不是通過(guò)K-Fold的CV策略來(lái)獲得預(yù)測(cè)值從而生成第二階段模型的特征,而是建立一個(gè)Holdout集,例如10%的訓(xùn)練數(shù)據(jù),第二階段的stacker模型就基于第一階段模型對(duì)這10%訓(xùn)練數(shù)據(jù)的預(yù)測(cè)值進(jìn)行擬合。
????說(shuō)白了,就是把Stacking流程中的K-Fold CV 改成HoldOut CV。
????以第一層為例,其5折HoldOut交叉驗(yàn)證將如下圖③所示:
? ??????需要注意的是,網(wǎng)上很多文章在介紹Stacking的時(shí)候都用了上面Blending的圖還強(qiáng)行解釋了的,比如③、⑤等。
? ??Stacking與Blending相比,Blending的優(yōu)勢(shì)在于:
? ? 1、Blending比較簡(jiǎn)單,而Stacking相對(duì)比較復(fù)雜;
? ? 2、能夠防止信息泄露:generalizers和stackers使用不同的數(shù)據(jù);
? ? 3、不需要和你的隊(duì)友分享你的隨機(jī)種子;
????而缺點(diǎn)在于:
? ? 1、只用了整體數(shù)據(jù)的一部分;
? ? 2、最終模型可能對(duì)留出集(holdout set)過(guò)擬合;
? ? 3、Stacking多次交叉驗(yàn)證要更加穩(wěn)健。
????文獻(xiàn)②中表示兩種技術(shù)所得的結(jié)果都相差不多,如何選擇取決于個(gè)人喜好。如果難以抉擇的話(huà),可以同時(shí)使用兩種技術(shù)并來(lái)個(gè)第三層將其結(jié)果合并起來(lái)。
以上為本人學(xué)習(xí)的總結(jié),很多內(nèi)容都未經(jīng)實(shí)際驗(yàn)證,如果發(fā)現(xiàn)總結(jié)中有錯(cuò)誤或與實(shí)際表現(xiàn)不符,敬請(qǐng)指正。
【參考文獻(xiàn)】
①https://www.kaggle.com/c/otto-group-product-classification-challenge
②https://mlwave.com/kaggle-ensembling-guide/
③https://zhuanlan.zhihu.com/p/25836678
④https://blog.csdn.net/Mr_tyting/article/details/72957853
⑤https://blog.csdn.net/data_scientist/article/details/78900265
⑥https://mlwave.com/human-ensemble-learning/
⑦h(yuǎn)ttps://blog.csdn.net/sinat_29819401/article/details/71191219
⑧https://blog.csdn.net/zwqjoy/article/details/80431496
⑨http://lib.csdn.net/article/machinelearning/35135