機器學習--集成學習(Ensemble Learning)

1、集成學習法html

在機器學習的有監督學習算法中,咱們的目標是學習出一個穩定的且在各個方面表現都較好的模型,但實際狀況每每不這麼理想,有時咱們只能獲得多個有偏好的模型(弱監督模型,在某些方面表現的比較好)。集成學習就是組合這裏的多個弱監督模型以期獲得一個更好更全面的強監督模型,集成學習潛在的思想是即使某一個弱分類器獲得了錯誤的預測,其餘的弱分類器也能夠將錯誤糾正回來。算法

集成方法是將幾種機器學習技術組合成一個預測模型的元算法,以達到減少方差(bagging)、誤差(boosting)或改進預測(stacking)的效果。bootstrap

集成學習在各個規模的數據集上都有很好的策略。api

數據集大:劃分紅多個小數據集,學習多個模型進行組合app

數據集小:利用Bootstrap方法進行抽樣,獲得多個數據集,分別訓練多個模型再進行組合框架

 

集合方法可分爲兩類:dom

 

  • 序列集成方法,其中參與訓練的基礎學習器按照順序生成(例如 AdaBoost)。序列方法的原理是利用基礎學習器之間的依賴關係。經過對以前訓練中錯誤標記的樣本賦值較高的權重,能夠提升總體的預測效果。
  • 並行集成方法,其中參與訓練的基礎學習器並行生成(例如 Random Forest)。並行方法的原理是利用基礎學習器之間的獨立性,經過平都可以顯著下降錯誤。

 

總結一下,集成學習法的特色:機器學習

  ①  將多個分類方法彙集在一塊兒,以提升分類的準確率。ide

(這些算法能夠是不一樣的算法,也能夠是相同的算法。)函數

  ②  集成學習法由訓練數據構建一組基分類器,而後經過對每一個基分類器的預測進行投票來進行分類

  ③  嚴格來講,集成學習並不算是一種分類器,而是一種分類器結合的方法。

  ④  一般一個集成分類器的分類性能會好於單個分類器

  ⑤  若是把單個分類器比做一個決策者的話,集成學習的方法就至關於多個決策者共同進行一項決策。

天然地,就產生兩個問題:

  1)怎麼訓練每一個算法?

  2)怎麼融合每一個算法?

這篇博客介紹一下集成學習的幾個方法:Bagging,Boosting以及Stacking。

一、Bagging(bootstrap aggregating,裝袋)

  Bagging即套袋法,先說一下bootstrap,bootstrap也稱爲自助法,它是一種有放回的抽樣方法,目的爲了獲得統計量的分佈以及置信區間,其算法過程以下:

  A)從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個訓練樣本(在訓練集中,有些樣本可能被屢次抽取到,而有些樣本可能一次都沒有被抽中)。共進行k輪抽取,獲得k個訓練集。(k個訓練集之間是相互獨立的)

  B)每次使用一個訓練集獲得一個模型,k個訓練集共獲得k個模型。(注:這裏並無具體的分類算法或迴歸方法,咱們能夠根據具體問題採用不一樣的分類或迴歸方法,如決策樹、感知器等)

  C)對分類問題:將上步獲得的k個模型採用投票的方式獲得分類結果;對迴歸問題,計算上述模型的均值做爲最後的結果。(全部模型的重要性相同)

  

 

  爲了讓更好地理解bagging方法,這裏提供一個例子。

  X 表示一維屬性,Y 表示類標號(1或-1)測試條件:當x<=k時,y=?;當x>k時,y=?;k爲最佳分裂點

  下表爲屬性x對應的惟一正確的y類別

  如今進行5輪隨機抽樣,結果以下

  

  

  每一輪隨機抽樣後,都生成一個分類器

  而後再將五輪分類融合

  

  對比符號和實際類,咱們能夠發現:在該例子中,Bagging使得準確率可達90%

  由此,總結一下bagging方法:

  ①  Bagging經過下降基分類器的方差,改善了泛化偏差
  ②  其性能依賴於基分類器的穩定性;若是基分類器不穩定,bagging有助於下降訓練數據的隨機波動致使的偏差;若是穩定,則集成分類器的偏差主要由基分類器的偏倚引發
  ③  因爲每一個樣本被選中的機率相同,所以bagging並不側重於訓練數據集中的任何特定實例

  經常使用的集成算法類是隨機森林。

  在隨機森林中,集成中的每棵樹都是由從訓練集中抽取的樣本(即 bootstrap 樣本)構建的。另外,與使用全部特徵不一樣,這裏隨機選擇特徵子集,從而進一步達到對樹的隨機化目的。

所以,隨機森林產生的誤差略有增長,可是因爲對相關性較小的樹計算平均值,估計方差減少了,致使模型的總體效果更好。

  

二、Boosting

其主要思想是將弱分類器組裝成一個強分類器。在PAC(probably approximately correct,機率近似正確)學習框架下,則必定能夠將弱分類器組裝成一個強分類器。

關於Boosting的兩個核心問題:

  1)在每一輪如何改變訓練數據的權值或機率分佈?

  經過提升那些在前一輪被弱分類器分錯樣例的權值,減少前一輪分對樣例的權值,來使得分類器對誤分的數據有較好的效果。

  2)經過什麼方式來組合弱分類器?

  經過加法模型將弱分類器進行線性組合,好比:

  AdaBoost(Adaptive boosting)算法:剛開始訓練時對每個訓練例賦相等的權重,而後用該算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練例賦以較大的權重,也就是讓學習算法在每次學習之後更注意學錯的樣本,從而獲得多個預測函數。經過擬合殘差的方式逐步減少殘差,將每一步生成的模型疊加獲得最終模型。

  GBDT(Gradient Boost Decision Tree),每一次的計算是爲了減小上一次的殘差,GBDT在殘差減小(負梯度)的方向上創建一個新的模型。

  

 

三、Stacking

  Stacking方法是指訓練一個模型用於組合其餘各個模型。首先咱們先訓練多個不一樣的模型,而後把以前訓練的各個模型的輸出爲輸入來訓練一個模型,以獲得一個最終的輸出。理論上,Stacking能夠表示上面提到的兩種Ensemble方法,只要咱們採用合適的模型組合策略便可。但在實際中,咱們一般使用logistic迴歸做爲組合策略。

  以下圖,先在整個訓練數據集上經過bootstrap抽樣獲得各個訓練集合,獲得一系列分類模型,而後將輸出用於訓練第二層分類器。

  

  

2、Bagging,Boosting兩者之間的區別

  一、Bagging和Boosting的區別:

  1)樣本選擇上:

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

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

  2)樣例權重:

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

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

  3)預測函數: 

  Bagging:全部預測函數的權重相等。

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

  4)並行計算: 

  Bagging:各個預測函數能夠並行生成

  Boosting:各個預測函數只能順序生成,由於後一個模型參數須要前一輪模型的結果。 

     二、決策樹與這些算法框架進行結合所獲得的新的算法:

  1)Bagging + 決策樹 = 隨機森林

  2)AdaBoost + 決策樹 = 提高樹

  3)Gradient Boosting + 決策樹 = GBDT

參考博文:

【1】集成學習總結 & Stacking方法詳解  https://blog.csdn.net/willduan1/article/details/73618677

【2】Bagging和Boosting 概念及區別  https://www.cnblogs.com/liuwu265/p/4690486.html

【3】集成學習法之bagging方法和boosting方法 https://blog.csdn.net/qq_30189255/article/details/51532442

【4】機器學習中的集成學習(Ensemble Learning)  http://baijiahao.baidu.com/s?id=1590266955499942419&wfr=spider&for=pc

【5】簡單易學的機器學習算法——集成方法(Ensemble Method) https://blog.csdn.net/google19890102/article/details/46507387

相關文章
相關標籤/搜索