1. 程式人生 > >集成學習算法總結----Boosting和Bagging(轉)

集成學習算法總結----Boosting和Bagging(轉)

原理 過程 訓練 嚴重 oos 機器學習 ppr 次數 error

1、集成學習概述

1.1 集成學習概述

集成學習在機器學習算法中具有較高的準去率,不足之處就是模型的訓練過程可能比較復雜,效率不是很高。目前接觸較多的集成學習主要有2種:基於Boosting的和基於Bagging,前者的代表算法有Adaboost、GBDT、XGBOOST、後者的代表算法主要是隨機森林。

1.2 集成學習的主要思想
集成學習的主要思想是利用一定的手段學習出多個分類器,而且這多個分類器要求是弱分類器,然後將多個分類器進行組合公共預測。核心思想就是如何訓練處多個弱分類器以及如何將這些弱分類器進行組合。

1.3、集成學習中弱分類器選擇
一般采用弱分類器的原因在於將誤差進行均衡,因為一旦某個分類器太強了就會造成後面的結果受其影響太大,嚴重的會導致後面的分類器無法進行分類。常用的弱分類器可以采用誤差率小於0.5的,比如說邏輯回歸、SVM、神經網絡。

1.4、多個分類器的生成
可以采用隨機選取數據進行分類器的訓練,也可以采用不斷的調整錯誤分類的訓練數據的權重生成新的分類器。

1.5、多個弱分類區如何組合
基本分類器之間的整合方式,一般有簡單多數投票、權重投票,貝葉斯投票,基於D-S證據理論的整合,基於不同的特征子集的整合。

2、Boosting算法

2.1 基本概念

Boosting方法是一種用來提高弱分類算法準確度的方法,這種方法通過構造一個預測函數系列,然後以一定的方式將他們組合成一個預測函數。他是一種框架算法,主要是通過對樣本集的操作獲得樣本子集,然後用弱分類算法在樣本子集上訓練生成一系列的基分類器。他可以用來提高其他弱分類算法的識別率,也就是將其他的弱分類算法作為基分類算法放於Boosting 框架中,通過Boosting框架對訓練樣本集的操作,得到不同的訓練樣本子集,用該樣本子集去訓練生成基分類器;每得到一個樣本集就用該基分類算法在該樣本集上產生一個基分類器,這樣在給定訓練輪數 n 後,就可產生 n 個基分類器,然後Boosting框架算法將這 n個基分類器進行加權融合,產生一個最後的結果分類器,在這 n個基分類器中,每個單個的分類器的識別率不一定很高,但他們聯合後的結果有很高的識別率,這樣便提高了該弱分類算法的識別率。在產生單個的基分類器時可用相同的分類算法,也可用不同的分類算法,這些算法一般是不穩定的弱分類算法,如神經網絡(BP) ,決策樹(C4.5)等。

2.2、Adaboost

Adaboost是boosting中較為代表的算法,基本思想是通過訓練數據的分布構造一個分類器,然後通過誤差率求出這個若弱分類器的權重,通過更新訓練數據的分布,叠代進行,直到達到叠代次數或者損失函數小於某一閾值。

Adaboost的算法流程:
假設訓練數據集為T={(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4),(X5,Y5)} 其中Yi={-1,1}

1、初始化訓練數據的分布
訓練數據的權重分布為D={W11,W12,W13,W14,W15},其中W1i=1/N。即平均分配。

2、選擇基本分類器
這裏選擇最簡單的線性分類器y=aX+b ,分類器選定之後,最小化分類誤差可以求得參數。

3、計算分類器的系數和更新數據權重
誤差率也可以求出來為e1.同時可以求出這個分類器的系數。基本的Adaboost給出的系數計算公式為技術分享
然後更新訓練數據的權重分布,
(圖片來自李航的統計學習方法)
技術分享

4、分類器的組合

技術分享
當然這種組合方式基於分類器的系數的,而分類器的系數又是根據誤差率求出來的,所以Adaboots最後影響的就是如何使用誤差率,以及訓練數據更新權重的的計算系數。

5、Adaboost的一些問題

Adaboost中涉及到一些可以進行調整的參數和計算公式的選擇主要有以下幾點:

**弱分類器如何選擇
**如何更好的實驗誤差率計算分類器的系數
**如何更好的計算訓練數據的權重的分布
**弱分類器如何進行組合
**叠代次數
**損失函數的閾值選取多少

3、Bagging算法

bagging方法bootstrap aggregating的縮寫,采用的是隨機有放回的選擇訓練數據然後構造分類器,最後組合。這裏以隨機森林為例進行講解。
隨機森林算法概述

隨機森林算法是上世紀八十年代Breiman等人提出來的,其基本思想就是構造很多棵決策樹,形成一個森林,然後用這些決策樹共同決策輸出類別是什麽。隨機森林算法及在構建單一決策樹的基礎上的,同時是單一決策樹算法的延伸和改進。在整個隨機森林算法的過程中,有兩個隨機過程,第一個就是輸入數據是隨機的從整體的訓練數據中選取一部分作為一棵決策樹的構建,而且是有放回的選取;第二個就是每棵決策樹的構建所需的特征是從整體的特征集隨機的選取的,這兩個隨機過程使得隨機森林很大程度上避免了過擬合現象的出現。

隨機森林算法具體的過程:

1、從訓練數據中選取n個數據作為訓練數據輸入,一般情況下n是遠小於整體的訓練數據N的,這樣就會造成有一部分數據是無法被去到的,這部分數據稱為袋外數據,可以使用袋外數據做誤差估計。

2、選取了輸入的訓練數據的之後,需要構建決策樹,具體方法是每一個分裂結點從整體的特征集M中選取m個特征構建,一般情況下m遠小於M。

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

4、 重復第2步和第3步多次,每一次輸入數據對應一顆決策樹,這樣就得到了隨機森林,可以用來對預測數據進行決策。

5、 輸入的訓練數據選擇好了,多棵決策樹也構建好了,對待預測數據進行預測,比如說輸入一個待預測數據,然後多棵決策樹同時進行決策,最後采用多數投票的方式進行類別的決策。

隨機森林算法圖示

技術分享

隨機森林算法的註意點:

1、 在構建決策樹的過程中是不需要剪枝的。
2、 整個森林的樹的數量和每棵樹的特征需要人為進行設定。
3、 構建決策樹的時候分裂節點的選擇是依據最小基尼系數的。

隨機森林有很多的優點:

a. 在數據集上表現良好,兩個隨機性的引入,使得隨機森林不容易陷入過擬合。

b. 在當前的很多數據集上,相對其他算法有著很大的優勢,兩個隨機性的引入,使得隨機森林具有很好的抗噪聲能力。

c. 它能夠處理很高維度(feature很多)的數據,並且不用做特征選擇,對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據,數據集無需規範化。

d. 在創建隨機森林的時候,對generlization error使用的是無偏估計。

e. 訓練速度快,可以得到變量重要性排序。

f. 在訓練過程中,能夠檢測到feature間的互相影響。

g 容易做成並行化方法。

h. 實現比較簡單。

轉自:http://lib.csdn.net/article/machinelearning/35135

bootstrps bagging boosting這幾個概念經常用到,現仔細學習了一下: 他們都屬於集成學習方法,(如:Bagging,Boosting,Stacking),將訓練的學習器集成在一起,原理來源於PAC學習模型(Probably Approximately CorrectK)。Kearns和Valiant指出,在PAC學習模型中,若存在一
個多項式級的學習算法來識別一組概念,並且識別正確率很高,那麽這組概念是強可學習的;而如果學習算法識別一組概念的正確率僅比隨機猜測略好,那麽這組概念是弱可學習的。他們提出了弱學習算法與強學習算法的等價性問題,即是否可以將弱學習算法提升成強學習算法。如果兩者等價,那麽在學習概念時,只要找到一個比隨機猜測略好的弱學習算法,就可以將其提升為強學習算法,而不必直接去找通常情況下很難獲得的強學習算法。 bootstraps:名字來自成語“pull up by your own bootstraps”,意思是依靠你自己的資源,它是一種有放回的抽樣方法,學習中還發現有種叫jackknife的方法,它是每一次移除一個樣本。 bagging: bootstrap aggregating的縮寫。讓該學習算法訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出的n個訓練倒組成,初始訓練例在某輪訓練集中可以出現多次或根本不出現訓練之後可得到一個預測函數序列h.,? ?h 最終的預測函數H對分類問題采用投票方式,對回歸問題采用簡單平均方法對新示例進行判別。 (訓練R個分類器fi,分類器之間其他相同就是參數不同。其中fi是通過從訓練集合中(N篇文檔)隨機取(取後放回)N次文檔構成的訓練集合訓練得到的。 –對於新文檔d,用這R個分類器去分類,得到的最多的那個類別作為d的最終類別.) boosting:其中主要的是AdaBoost(Adaptive Boosting)。初始化時對每一個訓練例賦相等的權重1/n,然後用該學算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練例賦以較大的權重,也就是讓學習算法在後續的學習中集中對比較難的訓練鍘進行學習,從而得到一個預測函數序列h 一?h其中h.也有一定的權重,預測效果好的預測函數權重較大,反之較小。最終的預測函數H對分類問題采用有權重的投票方式,對回歸問題采用加權平均的方法對新示例進行判別。( 類似Bagging方法,但是訓練是串行進行的,第k個分類器訓練時關註對前k-1分類器中錯分的文檔,即不是隨機取,而是加大取這些文檔的概率). Bagging與Boosting的區別:在於Bagging的訓練集的選擇是隨機的,各輪訓練集之間相互獨立,而Boostlng的訓練集的選擇是獨立的,各輪訓練集的選擇與前面各輪的學習結果有關;Bagging的各個預測函數沒有權重,而Boosting是有權重的;Bagging的各個預測函數可以並行生成,而Boosting的各個預測函數只能順序生成。對於象神經網絡這樣極為耗時的學習方法。Bagging可通過並行訓練節省大量時間開銷。   bagging和boosting都可以有效地提高分類的準確性。在大多數數據集中,boosting的準確性比bagging高。在有些數據集中,boosting會引起退化。---Overfit

文本分類中使用的投票方法(Voting,也叫組合分類器)就是一種典型的集成機器學習方法。它通過組合多個弱分類器來得到一個強分類器,包括Bagging和Boosting兩種方式,二者的主要區別是取樣方式不同。Bagging采用均勻取樣,而Boosting根據錯誤率來取樣,因此Boosting的分類精度要優於Bagging。投票分類方法雖然分類精度較高,但訓練時間較長。Boosting思想的一種改進型AdaBoost方法在郵件過濾、文本分類方面都有很好的性能。

轉自:http://blog.csdn.net/yangang908/article/details/39119337

集成學習算法總結----Boosting和Bagging(轉)