機器學習算法之集成學習之模型融合

機器學習算法之集成學習之模型融合

前言:集成學習(Ensemble Learning),廣泛用於分類和迴歸任務。它最初的思想很簡單:使用一些(不同的)方法改變原始訓練樣本的分佈,從而構建多個不同的分類器,並將這些分類器線性組合得到一個更強大的分類器,來做最後的決策。也就是常說的“三個臭皮匠頂個諸葛亮”的想法。

集成學習的理論基礎來自於Kearns和Valiant提出的基於PAC(probably approximately correct)的可學習性理論 ,PAC 定義了學習算法的強弱:

  1. 弱學習算法:識別錯誤率小於1/2(即準確率僅比隨機猜測略高的算法)
  2. 強學習算法:識別準確率很高並能在多項式時間內完成的算法

根據這兩個概念,後來產生了一個重要的結論:

強可學習與弱可學習是等價的,即:*一個概念是強可學習的充要條件是這個概念是弱可學習的*

據此,爲了得到一個優秀的強學習模型,我們可以將多個簡單的弱學習模型“提升”。


1. 集成學習概述

​ 使用一系列學習器進行學習,並使用某種規則(模型融合方法)把各個學習結果進行整合,從而獲得比單個學習器更好的學習效果的一種機器學習方法。如果把單個分類器比作一個決策者的話,集成學習的方法就相當於多個決策者共同進行一項決策。

img

​ 也就是說,集成學習有兩個主要的問題需要解決,第一是如何得到若干個個體學習器,第二是如何選擇一種結合策略,將這些個體學習器集合成一個強學習器。

2、集成學習之個體學習器

上一節我們講到,集成學習的第一個問題就是如何得到若干個個體學習器。這裏我們有兩種選擇。

  1. 第一種就是所有的個體學習器都是一個種類的,或者說是同質的。比如都是決策樹個體學習器,或者都是神經網絡個體學習器。
  2. 第二種是所有的個體學習器不全是一個種類的,或者說是異質的。比如我們有一個分類問題,對訓練集採用支持向量機個體學習器,邏輯迴歸個體學習器和樸素貝葉斯個體學習器來學習,再通過某種結合策略來確定最終的分類強學習器。

目前來說,同質個體學習器的應用是最廣泛的,一般我們常說的集成學習的方法都是指的同質個體學習器。而同質個體學習器使用最多的模型是CART決策樹和神經網絡。同質個體學習器按照個體學習器之間是否存在依賴關係可以分爲兩類第一個是個體學習器之間存在強依賴關係,一系列個體學習器基本都需要串行生成,代表算法是boosting系列算法第二個是個體學習器之間不存在強依賴關係,一系列個體學習器可以並行生成,代表算法是bagging和隨機森林(Random Forest)系列算法。下面就分別對這兩類算法做一個概括總結。

3、三種常用的集成方法

​ 最常見的一種就是依據集成思想的架構分爲 Bagging ,Boosting, Stacking三種。國內,南京大學的周志華教授對集成學習有深入的研究,其在09年發表的一篇概述性論文《Ensemple Learning》對這三種架構做出了明確的定義。

3.1、bagging

首先介紹經典的樣本估計方法:Bootstrapping (自助法)

​ 自助法是一種有放回的抽樣方法。它是非參數統計中一種重要的通過估計統計量方差進而進行區間估計的統計方法,遵從“在不知道數據總體分佈時,對總體分佈的最好的猜測便是由數據提供的分佈”原則。自助法的要點是:

  1. 假定觀察值就是數據總體
  2. 由這一假定的總體抽取樣本,即再抽樣

具體步驟如下:
1.採用重抽樣方式從原始樣本中抽取一定數量(容量m)的數據,重複抽樣m次,得到一個自助樣本(注意這種方法抽到的樣本有可能會有很多重複的,當然也有沒抽到的樣本,這裏叫袋外樣本,其實對應於袋外錯誤率(oob error,out-of-bag error))。
2.根據得到的自助樣本計算特定的統計量。
3.重複上述N次,得到N個自助統計量。
4.根據上述N個自助統計量估計出真實值。

Bagging:基於數據隨機重抽樣的分類器構建方法。從訓練集從進行子抽樣組成每個基模型所需要的子訓練集,對所有基模型預測的結果進行綜合產生最終的預測結果。

它的弱學習器之間沒有依賴關係,可以並行生成,我們可以用一張圖做一個概括如下:

img

  • 通過重複K次的有放回抽樣,訓練K個子模型(每次隨機抽樣訓練1個模型)
  • 對K個模型結果進行Voting/Averaging融合

Bagging融合示例:

img

​ 這裏的隨機採樣一般採用的是自助採樣法(Bootstap sampling),即對於m個樣本的原始訓練集,我們每次先隨機採集一個樣本放入採樣集,接着把該樣本放回,也就是說下次採樣時該樣本仍有可能被採集到,這樣採集m次,最終可以得到m個樣本的採樣集,由於是隨機採樣,這樣每次的採樣集是和原始訓練集不同的,和其他採樣集也是不同的,這樣得到多個不同的弱學習器。

隨機森林是bagging的一個特化進階版,所謂的特化是因爲隨機森林的弱學習器都是決策樹。所謂的進階是隨機森林在bagging的樣本隨機採樣基礎上,又加上了特徵的隨機選擇,其基本思想沒有脫離bagging的範疇。bagging和隨機森林算法的原理在後面的文章中會專門來講。

給定一個大小爲n的訓練集 D,Bagging算法從中均勻、有放回地選出 m個大小爲 n’ 的子集Di,作爲新的訓練集。在這 m個訓練集上使用分類、迴歸等算法,則可得到 m個模型,再通過取平均值、取多數票等方法綜合產生預測結果,即可得到Bagging的結果。

img(轉自知乎)

3.2、Boosting

Boosting每一次訓練的時候都更加關心上一次分類錯誤的樣例,給這些分類錯誤的樣例更大的權重,下一次訓練的目標就是能夠更容易辨別出上一次分類錯誤的樣例,最終將多次迭代訓練得到的弱分類器進行加權相加得到最終的強分類器

img

adaboost

​ 從圖中可以看出,Boosting算法的工作機制是首先從訓練集用初始權重訓練出一個弱學習器1,根據弱學習的學習誤差率表現來更新訓練樣本的權重,使得之前弱學習器1學習誤差率高的訓練樣本點的權重變高,使得這些誤差率高的點在後面的弱學習器2中得到更多的重視。然後基於調整權重後的訓練集來訓練弱學習器2.,如此重複進行,直到弱學習器數達到事先指定的數目T,最終將這T個弱學習器通過集合策略進行整合,得到最終的強學習器。

​ Boosting系列算法裏最著名算法主要有AdaBoost算法和提升樹(boosting tree)系列算法。提升樹系列算法裏面應用最廣泛的是梯度提升樹(Gradient Boosting Tree),當然還有我們比賽的大殺器–XGboost。

加入的過程中,通常根據它們的上一輪的分類準確率給予不同的權重。加和弱學習者之後,數據通常會被重新加權,來強化對之前分類錯誤數據點的分類,其中一個經典的提升算法例子是AdaBoost。

img

3.3、stacking

stacking的講解

用多種預測值作爲特徵訓練,sklearn中沒有現成的庫可以調用,這裏也不做過多的敘述

將訓練好的所有基模型對整個訓練集進行預測,第j個基模型對第i個訓練樣本的預測值將作爲新的訓練集中第i個樣本的第j個特徵值,最後基於新的訓練集進行訓練。同理,預測的過程也要先經過所有基模型的預測形成新的測試集,最後再對測試集進行預測:

img

4、學習之結合策略

​ 在上面幾節裏面我們主要關注於學習器,提到了學習器的結合策略但沒有細講,這裏就對集成學習的結合策略做一個總結。我們假定得到的T個弱學習器是{h_{1},h_{2},h_{3},...h_{T}}.

4.1、平均法

Averaging:平均法,針對迴歸問題

​ 對於數值類的迴歸預測問題,通常使用的結合策略是平均法,也就是說,對於若干個弱學習器的輸出進行平均得到最終的預測輸出。

1)最簡單的平均是算術平均,也就是說最終預測是

img

2)另一種是加權平均,每個個體學習器有一個權重ww,則最終預測是

imgimg

4.2、投票法

Voting:投票法,針對分類問題

對於分類問題的預測,我們通常使用的是投票法。

1)硬投票(hard):

基於分類標籤投票,也就是我們常說的少數服從多數。如果不止一個類別獲得最高票,則隨機選擇一個做最終類別。

img

2)軟投票(soft):基於分類標籤概率投票

4.3、學習法

​ 上兩節的方法都是對弱學習器的結果做平均或者投票,相對比較簡單,但是可能學習誤差較大。對於學習法,代表方法是stacking,當使用stacking的結合策略時, 我們不是對弱學習器的結果做簡單的邏輯處理,而是再加上一層學習器,也就是說,我們將訓練集弱學習器的學習結果作爲輸入,將訓練集的輸出作爲輸出,重新訓練一個學習器來得到最終結果。

img

對於不是stacking的方法:
訓練集輸入->若干弱學習器–>若干弱學習器輸出–>平均法投票法得到預測輸出。
對於stacking方法:
訓練集輸入->若干弱學習器1–>若干學習器1輸出(所有的輸出作爲學習器2的輸入特徵)–>次級學習器2–>學習器2輸出即爲預測輸出。

對於stacking,次級學習器的輸入不能理解爲原樣本的類別輸出,而僅僅只是初級學習器的預測輸出,這個輸出對於次級學習器來說僅僅只是一個特徵而已,至於是不是類別什麼的並不重要。

從原理上講,可以理解爲初級學習器對原樣本的特徵進行了梳理,得到了更清晰的特徵,方便次級學習器更容易的去學習清晰特徵和類別輸出的關係。

參考資料:

https://blog.csdn.net/nini_coded/article/details/79341485

https://www.cnblogs.com/pinard/p/6131423.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章