1. 程式人生 > >bagging和boosting 總結,較全

bagging和boosting 總結,較全

作為整合學習的二個方法,其實bagging和boosting的實現比較容易理解,但是理論證明比較費力。下面首先介紹這兩種方法。

所謂的整合學習,就是用多重或多個弱分類器結合為一個強分類器,從而達到提升分類方法效果。嚴格來說,整合學習並不算是一種分類器,而是一種分類器結合的方法。

1.bagging

bagging算是很基礎的整合學習的方法,他的提出是為了增強分類器效果,但是在處理不平衡問題上卻有很好的效果。

 

如上圖,原始資料集通過T次隨機取樣,得到T個與原始資料集相同大小的子資料集,分別訓練得到T個弱分類器Classifier,然後結合為一個強分類器。

以下給出隨機取樣的概率解釋及效果分析:

採用的是概率論裡面的booststrap思想,由於小樣本估計的不準確性,再加上現代計算效能的提升,可以用重複的計算提升小樣本的精度。

原始小樣本不能正確反映資料的真實分佈,用T次隨機取樣擬合真實分佈。

下式為L次分類得到的強分類器等於L次估計的期望:


下式為真實的y與每個弱分類器之間的差異,展開後得到右邊:


下式表示,最後得到弱分類器的差異會大於統計平均得到的強分類器的差異,簡而言之就是通過強分類,更好地擬合了。


上面得到的結果就是,如果原始資料為真實分佈的前提下,用bagging整合分類器,始終是能提升效果的,提升的效果取決於分類器的穩定性,穩定性越差,提升的效果越高。如神經網路這樣的不穩定分類器。

當然,上面假設是資料接近真實分佈,然後在概率[1/N,1/N,.....1/N]下重取樣。

如果訓練資料不是真實分佈,那麼bagging的效果也可能比非bagging更差。

接下來是如何把L個弱分類器整合為強分類器:

最簡單的方法就是投票法(vote)。對於一個測試樣本,通過L個弱分類器得到L個類別資訊,這些資訊投票產生最後的類別。如L=10,分類結果分別為:[3,3,3,3,5,5,6,7,1,8.]

那麼這個樣本就屬於3.

2.boosting

類似於bagging整合學習,boosting也是通過重取樣得到多個弱分類器,最後得到一個強分類器。區別是boosting是基於權值的弱分類器整合。


上面為boosting的流程圖,簡要概括如下:

1.e表示某個弱分類器的錯誤分類率,計算用來作為這個分類器的可信度權值a,以及更新取樣權值D。

2.D表示原始資料的權值矩陣,用來隨機取樣。剛開始每個樣本的取樣概率都一樣,為1/m。在某個弱分類器分類時,分類錯誤或對,則D就會根據e相應地增加或減少,那麼分錯的樣本由於D增大,在下一次分類取樣時被取樣的概率增加了,從而提高上次錯分樣本下次分對的概率。

3.α為弱分類器的可信度,bagging中隱含的α為1,boosting中,根據每個弱分類器的表現(e較低),決定這個分類器的結果在總的結果中所佔的權重,分類準的自然佔較多的權重。

最後根據可信度α,以及各個弱分類器的估計h(x),得到最後的結果。


如上圖為boosting的流程圖,主要為兩個部分,更新取樣權值D和計算分類器權重α,前者使得原來分錯的樣本再下一個分類器中能夠有較大的機率出現,從而提高原來分錯樣本之後分對的概率;後者根據分類器的表現,賦予不同弱分類器不同權值,最後得到一個加權的強分類器。

boosting概率上的效果證明這裡略去,只引出一個結論,不斷地迭代更新能使得最終的結果無限接近最優分類,不過boosting會傾向於一直分錯的樣本,如果樣本中有離群的錯誤樣本,boosting就會出現效果不好的情況。

總結上面討論了兩個整合學習的方法,bagging和boosting,boosting有點像bagging的改進版本,加入了權值取樣和權重強分類的概念。都是通過重取樣和弱分類器融合實現的方法。

轉:http://blog.csdn.net/jlei_apple/article/details/8168856

這兩天在看關於boosting演算法時,看到一篇不錯的文章講bootstrap, jackknife, bagging, boosting, random forest 都有介紹,以下是搜尋得到的原文,沒找到部落格作者的地址,

在這裡致謝作者的研究。

一併列出一些找到的介紹boosting演算法的資源:

(1)視訊講義,介紹boosting演算法,主要介紹AdaBoosing    http://videolectures.net/mlss05us_schapire_b/

  (2)   在這個網站的資源項裡列出了對於boosting演算法來源介紹的幾篇文章,可以下載:    http://www.boosting.org/tutorials

   (3)  一個部落格介紹了許多視覺中常用演算法,作者的實驗和理解,這裡附錄的連結是關於使用opencv進行人臉檢測的過程和程式碼,可以幫助理解訓練過程是如何完成的:
         http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html

(4)這裡是一個臺灣的電子期刊上關於AdaBoost的介紹:  http://140.113.87.114/cvrc/edm/vol_6/tech1.htm

 (  一 )

Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting

這些術語,我經常搞混淆,現在把它們放在一起,以示區別。(部分文字來自網路,由於是之前記的筆記,忘記來源了,特此向作者抱歉)

Bootstraping: 名字來自成語“pull up by your own bootstraps”,意思是依靠你自己的資源,稱為自助法,它是一種有放回的抽樣方法,它是非引數統計中一種重要的估計統計量方差進而進行區間估計的統計方法。其核心思想和基本步驟如下:
  (1) 採用重抽樣技術從原始樣本中抽取一定數量(自己給定)的樣本,此過程允許重複抽樣。 
  (2) 根據抽出的樣本計算給定的統計量T。 
  (3) 重複上述N次(一般大於1000),得到N個統計量T。 
  (4) 計算上述N個統計量T的樣本方差,得到統計量的方差。
  應該說Bootstrap是現代統計學較為流行的一種統計方法,在小樣本時效果很好。通過方差的估計可以構造置信區間等,其運用範圍得到進一步延伸。

Jackknife: 和上面要介紹的Bootstrap功能類似,只是有一點細節不一樣,即每次從樣本中抽樣時候只是去除幾個樣本(而不是抽樣),就像小刀一樣割去一部分。

(pku, sewm,shinningmonster.)

============================================================================================================================

下列方法都是上述Bootstraping思想的一種應用。

bagging:bootstrap aggregating的縮寫。讓該學習演算法訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出的n個訓練樣本組成,某個初始訓練樣本在某輪訓練集中可以出現多次或根本不出現,訓練之後可得到一個預測函式序列h_1,⋯ ⋯h_n ,最終的預測函式H對分類問題採用投票方式,對迴歸問題採用簡單平均方法對新示例進行判別。

[訓練R個分類器f_i,分類器之間其他相同就是引數不同。其中f_i是通過從訓練集合中(N篇文件)隨機取(取後放回)N次文件構成的訓練集合訓練得到的。對於新文件d,用這R個分類器去分類,得到的最多的那個類別作為d的最終類別。] boosting: 其中主要的是AdaBoost(Adaptive Boosting)。初始化時對每一個訓練例賦相等的權重1/n,然後用該學演算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練例賦以較大的權重,也就是讓學習演算法在後續的學習中集中對比較難的訓練例進行學習,從而得到一個預測函式序列h_1,⋯, h_m , 其中h_i也有一定的權重,預測效果好的預測函式權重較大,反之較小。最終的預測函式H對分類問題採用有權重的投票方式,對迴歸問題採用加權平均的方法對新示例進行判別。 (類似Bagging方法,但是訓練是序列進行的,第k個分類器訓練時關注對前k-1分類器中錯分的文件,即不是隨機取,而是加大取這些文件的概率。)  (pku, sewm,shinningmonster.) Bagging與Boosting的區別:二者的主要區別是取樣方式不同。Bagging採用均勻取樣,而Boosting根據錯誤率來取樣,因此Boosting的分類精度要優於Bagging。Bagging的訓練集的選擇是隨機的,各輪訓練集之間相互獨立,而Boostlng的各輪訓練集的選擇與前面各輪的學習結果有關;Bagging的各個預測函式沒有權重,而Boosting是有權重的;Bagging的各個預測函式可以並行生成,而Boosting的各個預測函式只能順序生成。對於象神經網路這樣極為耗時的學習方法。Bagging可通過並行訓練節省大量時間開銷。 bagging和boosting都可以有效地提高分類的準確性。在大多數資料集中,boosting的準確性比bagging高。在有些資料集中,boosting會引起退化--- Overfit。
Boosting思想的一種改進型AdaBoost方法在郵件過濾、文字分類方面都有很好的效能。

gradient boosting(又叫Mart, Treenet):Boosting是一種思想,Gradient Boosting是一種實現Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型損失函式的梯度下降方向。損失函式(loss function)描述的是模型的不靠譜程度,損失函式越大,則說明模型越容易出錯。如果我們的模型能夠讓損失函式持續的下降,則說明我們的模型在不停的改進,而最好的方式就是讓損失函式在其梯度(Gradient)的方向上下降。

Rand forest: 隨機森林,顧名思義,是用隨機的方式建立一個森林,森林裡面有很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。在得到森林之後,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對於分類演算法),然後看看哪一類被選擇最多,就預測這個樣本為那一類。 在建立每一棵決策樹的過程中,有兩點需要注意 - 取樣與完全分裂。首先是兩個隨機取樣的過程,random forest對輸入的資料要進行行、列的取樣。對於行取樣,採用有放回的方式,也就是在取樣得到的樣本集合中,可能有重複的樣本。假設輸入樣本為N個,那麼取樣的樣本也為N個。這樣使得在訓練的時候,每一棵樹的輸入樣本都不是全部的樣本,使得相對不容易出現over-fitting。然後進行列取樣,從M個feature中,選擇m個(m << M)。之後就是對取樣之後的資料使用完全分裂的方式建立出決策樹,這樣決策樹的某一個葉子節點要麼是無法繼續分裂的,要麼裡面的所有樣本的都是指向的同一個分類。一般很多的決策樹演算法都一個重要的步驟 - 剪枝,但是這裡不這樣幹,由於之前的兩個隨機取樣的過程保證了隨機性,所以就算不剪枝,也不會出現over-fitting。 按這種演算法得到的隨機森林中的每一棵都是很弱的,但是大家組合起來就很厲害了。可以這樣比喻隨機森林演算法:每一棵決策樹就是一個精通於某一個窄領域的專家(因為我們從M個feature中選擇m讓每一棵決策樹進行學習),這樣在隨機森林中就有了很多個精通不同領域的專家,對一個新的問題(新的輸入資料),可以用不同的角度去看待它,最終由各個專家,投票得到結果。

Rand forest與bagging的區別:1). Rand forest是選與輸入樣本的數目相同多的次數(可能一個樣本會被選取多次,同時也會造成一些樣本不會被選取到),而bagging一般選取比輸入樣本的數目少的樣本;2). bagging是用全部特徵來得到分類器,而rand forest是需要從全部特徵中選取其中的一部分來訓練得到分類器; 一般Rand forest效果比bagging效果好!

(  二  )原文地址:    http://blog.sina.com.cn/s/blog_5dd2e9270100c8ko.html

bootstrps bagging boosting這幾個概念經常用到,現仔細學習了一下: 他們都屬於整合學習方法,(如:Bagging,Boosting,Stacking),將訓練的學習器整合在一起,原理來源於PAC學習模型(ProbablyApproximately CorrectK)。Kearns和Valiant指出,在PAC學習模型中,若存在一
個多項式級的學習演算法來識別一組概念,並且識別正確率很高,那麼這組概念是強可學習的;而如果學習演算法識別一組概念的正確率僅比隨機猜測略好,那麼這組概念是弱可學習的。他們提出了弱學習演算法與強學習演算法的等價性問題,即是否可以將弱學習演算法提升成強學習演算法。如果兩者等價,那麼在學習概念時,只要找到一個比隨機猜測略好的弱學習演算法,就可以將其提升為強學習演算法,而不必直接去找通常情況下很難獲得的強學習演算法。 bootstraps:名字來自成語“pull up by your ownbootstraps”,意思是依靠你自己的資源,它是一種有放回的抽樣方法,學習中還發現有種叫jackknife的方法,它是每一次移除一個樣本。 bagging:bootstrapaggregating的縮寫。讓該學習演算法訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出的n個訓練倒組成,初始訓練例在某輪訓練集中可以出現多次或根本不出現訓練之後可得到一個預測函式序列h.,⋯⋯h 最終的預測函式H對分類問題採用投票方式,對迴歸問題採用簡單平均方法對新示例進行判別。 (訓練R個分類器fi,分類器之間其他相同就是引數不同。其中fi是通過從訓練集合中(N篇文件)隨機取(取後放回)N次文件構成的訓練集合訓練得到的。–對於新文件d,用這R個分類器去分類,得到的最多的那個類別作為d的最終類別.) boosting:其中主要的是AdaBoost(AdaptiveBoosting)。初始化時對每一個訓練例賦相等的權重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方法在郵件過濾、文字分類方面都有很好的效能。