集成學習——Bootstrap Bagging AdaBoost算法

集成學習是使用一系列學習器進行學習,並使用某種規則把各個學習結果進行整合從而獲得比單個學習器更好的學習效果的一種機器學習方法。 
簡單地說,就是通過抽樣等方式從原始數據集構造m個訓練集,再選擇一個弱分類器(比如決策樹)對這些訓練集進行訓練得到m個分類器,在待分類數據進行分類時,同時使用這m個分類器去判斷,使用多數表決或者權重聯合的方式綜合這m個分類器給出的分類結果,得到最終結果。 
就好比是:原始數據集是一堆書,本來這堆書是給一個人看的(一個弱分類器),他看完後學的知識,再根據他學的的知識執行任務(分類/迴歸)。但是現在,我們把書分開給m個人看,得到m個有知識的人(每本書可以被重複看),他們對同一件事發表自己的看法,最後的決策者通過多數表決(佔比例多的結果)來決策,或者通過考慮權重的方式(比如在學習過程中發現某個人是大牛,他的意見我們就會多重視)來決策。 
Bootstrap Bagging AdaBoost這三種算法提供了兩個功能: 
樣本選擇:怎麼把大樣本分成m個小樣本交給m個弱分類器去訓練 
分類器組合:怎樣綜合分類器的建議 
1. Bootstraping: 名字來自成語“pull up by your own bootstraps”,意思是依靠你自己的資源,稱爲自助法,它是一種有放回的抽樣方法,它是非參數統計中一種重要的估計統計量方差進而進行區間估計的統計方法。其核心思想和基本步驟如下: 
- 採用重抽樣技術從原始樣本中抽取一定數量(自己給定)的樣本,此過程允許重複抽樣。 
- 根據抽出的樣本計算給定的統計量T。 
- 重複上述N次(一般大於1000),得到N個統計量T。 
- 計算上述N個統計量T的樣本方差,得到統計量的方差。 
應該說Bootstrap是現代統計學較爲流行的一種統計方法,在小樣本時效果很好。通過方差的估計可以構造置信區間等,其運用範圍得到進一步延伸。 
Jackknife: 和上面要介紹的Bootstrap功能類似,只是有一點細節不一樣,即每次從樣本中抽樣時候只是去除幾個樣本(而不是抽樣),就像小刀一樣割去一部分。 
2. Bagging方法是一個統計重採樣的技術,它的基礎是Bootstrap。基本思想是:利用Bootstrap方法重採樣來生成多個版本的預測分類器(樣本選擇),然後把這些分類器進行組合。 
最終的決策採用投票方式,對迴歸問題採用簡單平均方法對新示例進行判別(分類器組合)。 
3. AdaBoost,是英文”Adaptive Boosting”(自適應增強)的縮寫,是一種機器學習方法,由Yoav Freund和Robert Schapire提出。AdaBoost方法的自適應在於:前一個分類器分錯的樣本會被用來訓練下一個分類器。AdaBoost方法對於噪聲數據和異常數據很敏感。但在一些問題中,AdaBoost方法相對於大多數其它學習算法而言,不會很容易出現過擬合現象。AdaBoost方法中使用的分類器可能很弱(比如出現很大錯誤率),但只要它的分類效果比隨機好一點(比如兩類問題分類錯誤率略小於0.5),就能夠改善最終得到的模型。而錯誤率高於隨機分類器的弱分類器也是有用的,因爲在最終得到的多個分類器的線性組合中,可以給它們賦予負係數,同樣也能提升分類效果。


維基百科

AdaBoost方法是一種迭代算法,在每一輪中加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率。每一個訓練樣本都被賦予一個權重,表明它被某個分類器選入訓練集的概率。如果某個樣本點已經被準確地分類,那麼在構造下一個訓練集中,它被選中的概率就被降低;相反,如果某個樣本點沒有被準確地分類,那麼它的權重就得到提高。通過這樣的方式,AdaBoost方法能“聚焦於”那些較難分(更富信息)的樣本上。在具體實現上,最初令每個樣本的權重都相等,對於第k次迭代操作,我們就根據這些權重來選取樣本點,進而訓練分類器Ck。然後就根據這個分類器,來提高被它分錯的的樣本的權重,並降低被正確分類的樣本權重。然後,權重更新過的樣本集被用於訓練下一個分類器Ck。整個訓練過程如此迭代地進行下去。


以上轉自維基百科關於adaboost的介紹。 
簡單總結一下AdaBoost算法的思路: 
選擇一個樣本->訓練一個分類器->根據訓練結果再進行抽樣->訓練分類器->根據訓練結果再進行抽樣->訓練分類器->… 
- 樣本選擇:可以看做是有重複的抽樣,但是抽樣樣本有,即非等概率抽樣。抽樣樣本的權重是在每次訓練後更新的。更新權值與樣本被分錯的次數成正比,因爲樣本被分錯說明當前分類器不能正確分類該樣本,從而希望這個被分錯的樣本更多的參與其他分類器的訓練,好讓它能被正確分類。 
- 分類器組合:採用弱分類器的線性組合,組合權重取決於弱分類器的準確率,對於弱分類器C1(x),...,Cm(x),f(x)=aiCi


下面來自維基百科:

AdaBoost算法 
xiyi表示原始樣本集D的樣本點和它們的類標。用Wk(i)表示第k次迭代時全體樣本的權重分佈。這樣就有如下所示的AdaBoost算法:

begin initial D={x1,y1,…,xn,yn},kmax(最大循環次數),Wk(i)=1/n,i=1,…,n 
k ← 0 
do k ← k+1 
訓練使用按照Wk(i)採樣的D的弱學習器Ck 
Ek ←對使用Wk(i)的D測量的Ck的訓練誤差

αk12ln1EkEkαk12ln1EkEk

Wk+1(i)Wk(i)Zk×{eαk,eαk,if hk(xi)=yiif hk(xi)yi

until k=kmax 
return Ck和αk,k=1,…,kmax(帶權值分類器的總體) 
end 
注意第5行中,當前權重分佈必須考慮到分類器Ck的誤差率。在第7行中,Zk只是一個歸一化係數,使得Wk(i)能夠代表一個真正的分佈,而hk(xi)是分量分類器Ck給出的對任一樣本點xi的標記(+1或-1),hk(xi) = yi時,樣本被正確分類。第8行中的迭代停止條件可以被換爲判斷當前誤差率是否小於一個閾值。

最後的總體分類的判決可以使用各個分量分類器加權平均來得到:

g(x)=[k=1kmaxαkhk(x)]g(x)=[kmaxk=1αkhk(x)]

這樣,最後對分類結果的判定規則是:

H(x)=sign(g(x))H(x)=sign(g(x))


簡單解釋一下: 
在進行第k個分類器訓練時,設xri,xwj費別爲第i,j個被正確,錯誤分類的樣本,此時出錯率ek=jxwj/(ixri+jxwj) 
那下一次抽樣樣本權重D(i+1)=D(i)ln1eiei 
第k個分類器的組合權重爲12ln1ekek 
具體例子可參考: 

大數據經典算法AdaBoost 講解


Ref: http://blog.csdn.net/shouwangzhelv/article/details/51995365

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