1. 程式人生 > >機器學習--Adaboost算法

機器學習--Adaboost算法

構造 其它 10個 目的 決定 增強學習 集成 1=1 錯誤

  最近在系統研究集成學習,到Adaboost算法這塊,一直不能理解,直到看到一篇博文,才有種豁然開朗的感覺,真的講得特別好,原文地址是(http://blog.csdn.net/guyuealian/article/details/70995333),在此摘錄,方便查找與復習。

一、AdaBoost簡介

Boosting, 也稱為增強學習或提升法,是一種重要的集成學習技術, 能夠將預測精度僅比隨機猜度略高的弱學習器增強為預測精度高的強學習器,這在直接構造強學習器非常困難的情況下,為學習算法的設計提供了一種有效的新思路和新方法。其中最為成功應用的是,Yoav Freund和Robert Schapire在1995年提出的AdaBoost算法。


AdaBoost是英文"Adaptive Boosting"(自適應增強)的縮寫,它的自適應在於:前一個基本分類器被錯誤分類的樣本的權值會增大,而正確分類的樣本的權值會減小,並再次用來訓練下一個基本分類器。同時,在每一輪叠代中,加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大叠代次數才確定最終的強分類器。
Adaboost算法可以簡述為三個步驟:
(1)首先,是初始化訓練數據的權值分布D1。假設有N個訓練樣本數據,則每一個訓練樣本最開始時,都被賦予相同的權值:w1=1/N。
(2)然後,訓練弱分類器hi。具體訓練過程中是:如果某個訓練樣本點,被弱分類器hi準確地分類,那麽在構造下一個訓練集中,它對應的權值要減小;相反,如果某個訓練樣本點被錯誤分類,那麽它的權值就應該增大。權值更新過的樣本集被用於訓練下一個分類器,整個訓練過程如此叠代地進行下去。

(3)最後,將各個訓練得到的弱分類器組合成一個強分類器。各個弱分類器的訓練過程結束後,加大分類誤差率小的弱分類器的權重,使其在最終的分類函數中起著較大的決定作用,而降低分類誤差率大的弱分類器的權重,使其在最終的分類函數中起著較小的決定作用。
換而言之,誤差率低的弱分類器在最終分類器中占的權重較大,否則較小。

二、AdaBoost算法過程

給定訓練數據集:技術分享圖片,其中技術分享圖片用於表示訓練樣本的類別標簽,i=1,...,N。Adaboost的目的就是從訓練數據中學習一系列弱分類器或基本分類器,然後將這些弱分類器組合成一個強分類器。

相關符號定義:

  技術分享圖片

  Adaboost的算法流程如下:

技術分享圖片

技術分享圖片

技術分享圖片

  相關說明:

技術分享圖片

  綜合上面的推導,可得樣本分錯與分對時,其權值更新的公式為:

  技術分享圖片

三、AdaBoost實例講解

  例:給定如圖所示的訓練樣本,弱分類器采用平行於坐標軸的直線,用Adaboost算法的實現強分類過程。

  技術分享圖片

  技術分享圖片

  數據分析

 將這10個樣本作為訓練數據,根據 XY 的對應關系,可把這10個數據分為兩類,圖中用“+”表示類別1,用“O”表示類別-1。本例使用水平或者垂直的直線作為分類器,圖中已經給出了三個弱分類器,即:

      技術分享圖片

  初始化:

首先需要初始化訓練樣本數據的權值分布,每一個訓練樣本最開始時都被賦予相同的權值:wi=1/N,這樣訓練樣本集的初始權值分布D1(i):

令每個權值w1i = 1/N = 0.1,其中,N = 10,i = 1,2, ..., 10,然後分別對於t= 1,2,3, ...等值進行叠代(t表示叠代次數,表示第t輪),下表已經給出訓練樣本的權值分布情況:

技術分享圖片

  第1次叠代t=1:

初試的權值分布D1為1/N(10個數據,每個數據的權值皆初始化為0.1),

        D1=[0.1, 0.1, 0.1, 0.1, 0.1, 0.1,0.1, 0.1, 0.1, 0.1]

在權值分布D1的情況下,取已知的三個弱分類器h1h2h3中誤差率最小的分類器作為第1個基本分類器H1(x)(三個弱分類器的誤差率都是0.3,那就取第1個吧)

        技術分享圖片

在分類器H1(x)=h1情況下,樣本點“5 7 8”被錯分,因此基本分類器H1(x)的誤差率為:

  技術分享圖片

  可見,被誤分類樣本的權值之和影響誤差率e,誤差率e影響基本分類器在最終分類器中所占的權重α

  技術分享圖片

  然後,更新訓練樣本數據的權值分布,用於下一輪叠代,對於正確分類的訓練樣本“1 2 3 4 6 9 10”(共7個)的權值更新為:

  技術分享圖片

  這樣,第1輪叠代後,最後得到各個樣本數據新的權值分布:

      D2=[1/14,1/14,1/14,1/14,1/6,1/14,1/6,1/6,1/14,1/14]

由於樣本數據“5 7 8”被H1(x)分錯了,所以它們的權值由之前的0.1增大到1/6;反之,其它數據皆被分正確,所以它們的權值皆由之前的0.1減小到1/14,下表給出了權值分布的變換情況:

  技術分享圖片

  可得分類函數:f1(x)= α1H1(x) = 0.4236H1(x)。此時,組合一個基本分類器sign(f1(x))作為強分類器在訓練數據集上有3個誤分類點(即5 7 8),此時強分類器的訓練錯誤為:0.3

  第二次叠代t=2:

  技術分享圖片

  技術分享圖片

技術分享圖片

  這樣,第2輪叠代後,最後得到各個樣本數據新的權值分布:

      D3=[1/22,1/22,1/6,1/6,7/66,1/6,7/66,7/66,1/22,1/22]

  下表給出了權值分布的變換情況:

  技術分享圖片

  

  可得分類函數:f2(x)=0.4236H1(x) + 0.6496H2(x)。此時,組合兩個基本分類器sign(f2(x))作為強分類器在訓練數據集上有3個誤分類點(即3 4 6),此時強分類器的訓練錯誤為:0.3

  第三次叠代t=3:

  技術分享圖片

    技術分享圖片

  技術分享圖片

   這樣,第3輪叠代後,得到各個樣本數據新的權值分布為:

    D4=[1/6,1/6,11/114,11/114,7/114,11/114,7/114,7/114,1/6,1/38]

  下表給出了權值分布的變換情況:

  技術分享圖片

  可得分類函數:f3(x)=0.4236H1(x) + 0.6496H2(x)+0.9229H3(x)。此時,組合三個基本分類器sign(f3(x))作為強分類器,在訓練數據集上有0個誤分類點。至此,整個訓練過程結束。

整合所有分類器,可得最終的強分類器為:

  技術分享圖片

  這個強分類器Hfinal對訓練樣本的錯誤率為0!

  Adaboost算法的某些特性是非常好的,這裏主要介紹Adaboost的兩個特性。(1)是訓練的錯誤率上界,隨著叠代次數的增加,會逐漸下降;(2)是Adaboost算法即使訓練次數很多,也不會出現過擬合的問題。關於這兩方面的研究和分析,我建議各大網友,還是看看大神的博客:http://blog.csdn.net/v_july_v/article/details/40718799

四、AdaBoost的優點和缺點

  優點

(1)Adaboost提供一種框架,在框架內可以使用各種方法構建子分類器。可以使用簡單的弱分類器,不用對特征進行篩選,也不存在過擬合的現象。

(2)Adaboost算法不需要弱分類器的先驗知識,最後得到的強分類器的分類精度依賴於所有弱分類器。無論是應用於人造數據還是真實數據,Adaboost都能顯著的提高學習精度。

(3)Adaboost算法不需要預先知道弱分類器的錯誤率上限,且最後得到的強分類器的分類精度依賴於所有弱分類器的分類精度,可以深挖分類器的能力。Adaboost可以根據弱分類器的反饋,自適應地調整假定的錯誤率,執行的效率高。

(4)Adaboost對同一個訓練樣本集訓練不同的弱分類器,按照一定的方法把這些弱分類器集合起來,構造一個分類能力很強的強分類器,即“三個臭皮匠賽過一個諸葛亮”。

  缺點:

在Adaboost訓練過程中,Adaboost會使得難於分類樣本的權值呈指數增長,訓練將會過於偏向這類困難的樣本,導致Adaboost算法易受噪聲幹擾。此外,Adaboost依賴於弱分類器,而弱分類器的訓練時間往往很長。

      

  

機器學習--Adaboost算法