古詩詞大全網 - 成語故事 - 模型融合方法總結

模型融合方法總結

壹般來說,通過融合多個不同的模型,可能提升機器學習的性能,這壹方法在各種 機器學習比賽 中廣泛應用,比如在kaggle上的otto產品分類挑戰賽①中取得冠軍和亞軍成績的模型都是融合了1000+模型的“龐然大物”。

常見的集成學習&模型融合方法包括:簡單的Voting/Averaging(分別對於分類和回歸問題)、Stacking、Boosting和Bagging。

在不改變模型的情況下,直接對各個不同的模型預測的結果,進行投票或者平均,這是壹種簡單卻行之有效的融合方式。

比如對於 分類問題 ,假設有三個相互獨立的模型,每個正確率都是70%,采用少數服從多數的方式進行投票。那麽最終的正確率將是:

即結果經過簡單的投票,使得正確率提升了8%。這是壹個簡單的概率學問題——如果進行投票的模型越多,那麽顯然其結果將會更好。但是其 前提條件是模型之間相互獨立,結果之間沒有相關性。越相近的模型進行融合,融合效果也會越差。

比如對於壹個正確輸出全為1的測試,我們有三個很相近的的預測結果,分別為:

進行投票其結果為:

而假如我們的各個預測結果之間有很大差異:

其投票結果將為:

可見模型之間差異越大,融合所得的結果將會更好。//這種特性不會受融合方式的影響。 註意這裏所指模型之間的差異,並不是指正確率的差異,而是指模型之間相關性的差異。

? ?對於 回歸問題 ,對各種模型的預測結果進行平均,所得到的結果通過能夠減少過擬合,並使得邊界更加平滑,單個模型的邊界可能很粗糙。這是很直觀的性質,隨便放張圖②就不另外詳細舉例了。

在上述融合方法的基礎上,壹個進行改良的方式是對各個投票者/平均者分配不同的權重以改變其對最終結果影響的大小。對於正確率低的模型給予更低的權重,而正確率更高的模型給予更高的權重。這也是可以直觀理解的—— 想要推翻專家模型(高正確率模型)的唯壹方式,就是臭皮匠模型(低正確率模型)同時投出相同選項的反對票 。 具體的對於權重的賦值,可以用正確率排名的正則化等。

這種方法看似簡單,但是卻是下面各種“高級”方法的基礎。

Boosting是壹種將各種弱分類器串聯起來的集成學習方式,每壹個分類器的訓練都依賴於前壹個分類器的結果,順序運行的方式導致了運行速度慢。和所有融合方式壹樣,它不會考慮各個弱分類器模型本身結構為何,而是對訓練數據(樣本集)和連接方式進行操縱以獲得更小的誤差。但是為了將最終的強分類器的誤差均衡,之前所選取的分類器壹般都是相對比較弱的分類器,因為壹旦某個分類器較強將使得後續結果受到影響太大。 所以多用於集成學習而非模型融合(將多個已經有較好效果的模型融合成更好的模型)。

這裏引用知乎專欄 《機器學習模型融合方法概述》③處引用的加州大學歐文分校Alex Ihler教授的兩頁PPT:

其基本工作機制如下:

1、從初始樣本集中訓練出壹個基學習器;

2、根據基學習器的表現對樣本集分布進行調整,使得做錯的樣本能在之後的過程中受到更多的關註;

3、用調整後的樣本集訓練下壹個基學習器;

4、重復上述步驟,直到滿足壹定條件。

註意,壹般只有弱分類器都是同壹種分類器(即同質集成)的時候,才將弱分類器稱為基學習器,如果是異質集成,則稱之為個體學習器。由於不是本文重點,所以此處不作區分。特此說明。

最終將這些弱分類器進行 加權相加 。

常見的Boosting方法有Adaboost、GBDT、XGBOOST等。 //下面僅從思想層次上簡單介紹各種方法,具體的算法推理公式推導以及可用的工具包等參考本文附錄。

Bagging是 Bootstrap?Aggregating 的縮寫。這種方法同樣不對模型本身進行操作,而是作用於樣本集上。采用的是隨機有放回的選擇訓練數據然後構造分類器,最後進行組合。與Boosting方法中各分類器之間的相互依賴和串行運行不同,Bagging方法中基學習器之間不存在強依賴關系,且同時生成並行運行。

其基本思路為:

1、在樣本集中進行K輪有放回的抽樣,每次抽取n個樣本,得到K個訓練集;

2、分別用K個訓練集訓練得到K個模型。

3、對得到的K個模型預測結果用投票或平均的方式進行融合。

在這裏,訓練集的選取可能不會包含所有樣本集,未被包含的數據成為包/袋外數據,可用來進行包外誤差的泛化估計。每個模型的訓練過程中,每次訓練集可以取全部的特征進行訓練,也可以隨機選取部分特征訓練,例如極有代表性的隨機森林算法就是每次隨機選取部分特征。

下面僅從思想層面介紹隨機森林算法:

1、在樣本集中進行K輪有放回的抽樣,每次抽取n個樣本,得到K個訓練集,其中n壹般遠小於樣本集總數;

2、選取訓練集,在整體特征集M中選取部分特征集m構建決策樹,其中m壹般遠小於M;

3、在構造每棵決策樹的過程中,按照選取最小的基尼指數進行分裂節點的選取進行決策樹的構建。決策樹的其他結點都采取相同的分裂規則進行構建,直到該節點的所有訓練樣例都屬於同壹類或者達到樹的最大深度;

4、重復上述步驟,得到隨機森林;

5、多棵決策樹同時進行預測,對結果進行投票或平均得到最終的分類結果。

多次隨機選擇的過程,使得隨機森林不容易過擬合且有很好的抗幹擾能力。

優化方式上 >

在機器學習中,我們訓練壹個模型通常是將定義的Loss最小化的過程。但是單單的最小化loss並不能保證模型在解決壹般化的問題時能夠最優,甚至不能保證模型可用。訓練數據集的Loss與壹般化數據集的Loss之間的差異被稱為generalization error。

Variance過大會導致模型過擬合,而Bias過大會使得模型欠擬合。

? Bagging 方法主要通過降低 Variance 來降低 error , Boosting 方法主要通過降低 Bias 來降低 error 。

Bagging方法采用多個不完全相同的訓練集訓練多個模型,最後結果取平均。由於

所以最終結果的Bias與單個模型的Bias相近,壹般不會顯著降低Bias。

另壹方面,對於Variance則有:

Bagging的多個子模型由不完全相同的數據集訓練而成,所以子模型間有壹定的相關性但又不完全獨立,所以其結果在上述兩式的中間狀態。因此可以在壹定程度上降低Variance從而使得總error減小。

Boosting方法從優化角度來說,是用forward-stagewise這種貪心法去最小化損失函數

。所謂forward-stagewise,就是在叠代的第n步,求解新的子模型f(x)及步長a(或者稱組合系數),來最小化

,這裏

是前n步得到的子模型的和。因此Boosting在最小化損失函數,Bias自然逐步下降,而由於模型間強相關,不能顯著降低Variance。

Bagging裏面每個分類器是強分類器,因為他降低的是方差,方差過高需要降低是過擬合。

boosting裏面每個分類器是弱分類器,因為他降低的是偏差,偏差過高是欠擬合。

樣本選擇上>

Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。

Boosting:每壹輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化。而權值是根據上壹輪的分類結果進行調整。

樣例權重 >

Bagging:使用均勻取樣,每個樣例的權重相等

Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大

預測函數 >

Bagging:所有預測函數的權重相等。

Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重

並行計算 >

Bagging:各個預測函數可以並行生成

Boosting:理論上各個預測函數只能順序生成,因為後壹個模型參數需要前壹輪模型的結果。計算角度來看,兩種方法都可以並行。bagging,random forest並行化方法顯而意見。boosting有強力工具stochastic gradient boosting

接下來介紹在 各種機器學習比賽中 被譽為“七頭龍神技”的Stacking方法。

(但因其模型的龐大程度與效果的提升程度往往不成正比,所以壹般很難應用於實際生產中)

下面以壹種易於理解但不會實際使用的兩層的stacking方法為例,簡要說明其結構和工作原理: (這種模型問題將在後續說明)

假設我們有三個基模型M1,M2,M3,用訓練集對其進行訓練後,分別用來預測訓練集和測試集的結果,得到P1,T1,P2,T2,P3,T3

這種方法的問題在於,模型M1/2/3是我們用整個訓練集訓練出來的,我們又用這些模型來預測整個訓練集的結果,毫無疑問過擬合將會非常嚴重。因此在實際應用中往往采用 交叉驗證 的方法來解決過擬合問題。

首先放幾張圖⑤,我們著眼於Stacking方法的第壹層,以5折交叉驗證為例說明其工作原理:

1、首先我們將訓練集分為五份。

2、對於每壹個基模型來說,我們用其中的四份來訓練,然後對未用來的訓練的壹份訓練集和測試集進行預測。然後改變所選的用來訓練的訓練集和用來驗證的訓練集,重復此步驟,直到獲得完整的訓練集的預測結果。

3、對五個模型,分別進行步驟2,我們將獲得5個模型,以及五個模型分別通過交叉驗證獲得的訓練集預測結果。即P1、P2、P3、P4、P5。

4、用五個模型分別對測試集進行預測,得到測試集的預測結果:T1、T2、T3、T4、T5。

5、將P1~5、T1~5作為下壹層的訓練集和測試集。在圖中分別作為了模型6的訓練集和測試集。

Stacking方法的整體結構如下圖所示:

Blending是壹種和Stacking很相像的模型融合方式,它與Stacking的區別在於訓練集不是通過K-Fold的CV策略來獲得預測值從而生成第二階段模型的特征,而是建立壹個Holdout集,例如10%的訓練數據,第二階段的stacker模型就基於第壹階段模型對這10%訓練數據的預測值進行擬合。

說白了,就是把Stacking流程中的K-Fold CV 改成HoldOut CV。

以第壹層為例,其5折HoldOut交叉驗證將如下圖③所示:

需要註意的是,網上很多文章在介紹 Stacking 的時候都用了上面 Blending 的圖還強行解釋了的,比如③、⑤等。

Stacking 與 Blending 相比 ,Blending的優勢在於:

1、Blending比較簡單,而Stacking相對比較復雜;

2、能夠防止信息泄露:generalizers和stackers使用不同的數據;

3、不需要和妳的隊友分享妳的隨機種子;

而缺點在於:

1、只用了整體數據的壹部分;

2、最終模型可能對留出集(holdout set)過擬合;

3、Stacking多次交叉驗證要更加穩健。

文獻②中表示兩種技術所得的結果都相差不多,如何選擇取決於個人喜好。如果難以抉擇的話,可以同時使用兩種技術並來個第三層將其結果合並起來。

以上為本人學習的總結,很多內容都未經實際驗證,如果發現總結中有錯誤或與實際表現不符,敬請指正。

參考文獻

①/c/otto-group-product-classification-challenge

②/kaggle-ensembling-guide/

③/p/25836678

④/human-ensemble-learning/

⑦/sinat_29819401/article/details/71191219

⑧/zwqjoy/article/details/80431496

⑨/article/machinelearning/35135