提高分類性能-AdaBoost

一 前言

前面的文章已經介紹了五種不一樣的分類器,它們各有優缺點。咱們能夠很天然地將不一樣的分類器組合起來,而這種組合結果則被成爲集成方法(ensemble method)或者元算法(meta-algorithm)。使用集成方法時會有多種形式:能夠是不一樣算法的集成,也能夠是同一種算法在不一樣設置下的集成,還能夠是數據集不一樣部分分配給不一樣分類器以後的集成。算法


二 集成方法

集成方法(ensemble method)經過組合多個基分類器(base classifier)來完成學習任務,很有點「三個臭皮匠頂個諸葛亮」的意味。基分類器通常採用的是弱可學習(weakly learnable)分類器,經過集成方法,組合成一個強可學習(strongly learnable)分類器。所謂弱可學習,是指學習的正確率僅略優於隨機猜想的多項式學習算法;強可學習指正確率較高的多項式學習算法。集成學習的泛化能力通常比單一的基分類器要好,這是由於大部分基分類器都分類錯誤的機率遠低於單一基分類器的。bootstrap

集成方法主要包括Bagging和Boosting兩種方法,Bagging和Boosting都是將已有的分類或迴歸算法經過必定方式組合起來,造成一個性能更增強大的分類器,更準確的說這是一種分類算法的組裝方法,即將弱分類器組裝成強分類器的方法。api

1 Bagging

自舉匯聚法(bootstrap aggregating),也稱爲bagging方法。Bagging對訓練數據採用自舉採樣(boostrap sampling),即有放回地採樣數據,主要思想:框架

  • 從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個訓練樣本(在訓練集中,有些樣本可能被屢次抽取到,而有些樣本可能一次都沒有被抽中)。共進行k輪抽取,獲得k個訓練集。(k個訓練集之間是相互獨立的)
  • 每次使用一個訓練集獲得一個模型,k個訓練集共獲得k個模型。(注:這裏並無具體的分類算法或迴歸方法,咱們能夠根據具體問題採用不一樣的分類或迴歸方法,如決策樹、感知器等)
  • 對分類問題:將上步獲得的k個模型採用投票的方式獲得分類結果;對迴歸問題,計算上述模型的均值做爲最後的結果。(全部模型的重要性相同)

2 Boosting

Boosting是一種與Bagging很相似的技術。Boosting的思路則是採用重賦權(re-weighting)法迭代地訓練基分類器,主要思想:函數

  • 每一輪的訓練數據樣本賦予一個權重,而且每一輪樣本的權值分佈依賴上一輪的分類結果。
  • 基分類器之間採用序列式的線性加權方式進行組合。

三 Bagging、Boosting兩者之間的區別

樣本選擇上:性能

  • Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。
  • Boosting:每一輪的訓練集不變,只是訓練集中每一個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。

樣例權重:學習

  • Bagging:使用均勻取樣,每一個樣例的權重相等。
  • Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。

預測函數:blog

  • Bagging:全部預測函數的權重相等。
  • Boosting:每一個弱分類器都有相應的權重,對於分類偏差小的分類器會有更大的權重。

並行計算:it

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

四 總結

這兩種方法都是把若干個分類器整合爲一個分類器的方法,只是整合的方式不同,最終獲得不同的效果,將不一樣的分類算法套入到此類算法框架中必定程度上會提升了原單一分類器的分類效果,可是也增大了計算量。class

下面是將決策樹與這些算法框架進行結合所獲得的新的算法:

  • Bagging + 決策樹 = 隨機森林
  • AdaBoost + 決策樹 = 提高樹
  • Gradient Boosting + 決策樹 = GBDT

集成方法衆多,本文主要關注Boosting方法中的一種最流行的版本,即AdaBoost。

代碼以下:

相關文章
相關標籤/搜索