1. 程式人生 > >Adaboost基本二分類演算法

Adaboost基本二分類演算法

最早型別的Adaboost是由Yoav Freund和Robert E.Schapire提出的,一種用於二分類的boosting整合學習方法。也是李航《統計學習方法》中所介紹的Adaboost。它將一系列弱分類器的線性組合,生成一個強分類器。需要注意的是這裡的弱分類器的定義是學習的正確率僅比隨機猜測略好的分類器。如果基分類器已經是強學習了,再用boosing的話可能提升的效果就不是很明顯了。因為boosting的想法就是將弱學習演算法提升成強學習演算法。Adaboost是一個二分類演算法,所以隨機猜測的error就是0.5。

下面是Adaboost演算法的虛擬碼:

從演算法的虛擬碼我們可以看到如下情況:

 1、Adaboost最後返回的是一系列弱分類器的加權線性組合,當有新的樣本點需要預測時,直接放入最後的模型即可。

 2、每次迭代擬合一個弱分類器以後,演算法會根據基分類器的error分配給該基分類器一個權重(第9行),分類錯誤率越小的分類器權重越大,反之亦然。然後,就會修改樣本的權重(第10行),提高分類錯誤樣本的權重,降低分類正確樣本的權重。因為在公式裡面乘上了\alpha _t,所以在修改樣本的權重時也會考慮具體的基分類器。在權重很高的基分類器中,分錯的樣本會有更高的權重。下一 次迭代就會使用重新分配權重的資料擬合新的弱分類器,同時會重點關注分類錯誤的樣本。

 3、分類誤差為所有分類錯誤的樣本權重之和(注意,樣本權重後面更新時做了Normalize,保證了概率分佈)。但是,當弱分類  器的分類誤差大於0.5的時候,演算法就停止迭代了。解決這個問題主要有以下幾種辦法:

      a)選擇較強的弱分類器。

      b)遇到error大於0.5時,反轉分類器的結果。

           二分類的時候,如果基分類器的error大於0.5,就把輸出的正負結果反轉以下,這樣原來的準確率就變成了error。同時也保證了error小於0.5。

      c)遇到error大於0.5時,重新設定權值。

           也就是在發現一個基分類器error大於0.5的時候,捨棄這個基分類器。然後重新設定所有樣本的權值(就好像重新執行Adaboost一樣)

      d)反覆重新取樣和生成基分類器直到error小於0.5.

            重取樣的方法主要是針對無法接受帶權樣本的基學習器。需要注意的是,這種方法不僅可能導致計算複雜度的嚴重提升,在有些情況下甚至出現“試了100次也沒有辦法得到一個error小於0.5的結果”,尤其是在權值分佈已經嚴重偏向某些樣本(通常是noise)的時候,這種情況更為常見。

  4、在每次迭代訓練基本分類器時,選擇誤差最小的基本分類器。

至於為什麼弱分類器的error要小於0.5,原因有以下幾點

1、PCA定義了弱分類器為識別錯誤率小於0.5的學習演算法。

2、整合學習的基分類器要有一定準確性,太壞反而會對整合的結果起到負的作用。所以,正如前面所說基分類器要比隨機猜測的結果好。針對現在的二分類,隨機猜測的error就是0.5。

3、如果基分類器的誤分類率大於0.5,該基分類器的權重就為負數,同時error越大,負數就越小,也就意味這該分類器的權重大。但這樣不符合邏輯,因為這個分類器的error很大,權重應該更小才對。所以,只有到那個error小於等於0.5時,基分類器的權重是大於等於0的。

下面列以下Adaboost的優缺點:

Adaboost的優點:

1、沒有很多的引數需要調整。

2、不容易過擬合,但是基分類器太複雜也會過擬合。

3、可以構造任意複雜的決策區域,處理非線性的資料。

4、Adaboost是一個框架,可以使用多種基學習器。

Adaboost的缺點:

1、對噪聲和異常點很敏感。

這個只是最基礎的二分類Adaboost演算法,它還可以推廣到多分類,也就是Adaboost.M1演算法。將在下一篇文章講解。

參考連結:https://ask.julyedu.com/question/65

                  http://www.voidcn.com/article/p-oxwcnnol-by.html

                  https://www.csd.uwo.ca/courses/CS4442b/L5-ML-Boosting.pdf

                  https://zhuanlan.zhihu.com/p/38507561

                  https://zhuanlan.zhihu.com/p/37671791

參考書籍:李航《統計學習方法》,周志華《機器學習》