天天看點

Adaboost算法的初步了解

  菜鳥初次接觸Adaboost,雖然算法流程比較清晰簡單,但對于其中的理論,存在着不少疑惑之處,如下所示:

1)如何訓練得到的弱分類器,我們需要訓練出多少個弱分類器進行後續的計算?對若分類器有什麼要求嗎?

2)加法模型有什麼好處?

3)最後得到的強分類器是如何展現出分類效果的?疊代次數是不是需要最終err為0才疊代結束?

4)該算法存在過拟合現象嗎?

5)我們可不可以對疊代的過程進行執行個體化?可不可以用幾何直覺的方式去展現出來?

6)Adaboost有哪些具體的實際應用?

本文主要針對這6個問題進行叙述,若存在錯誤之處,懇請大神們不吝指出。

問題1

    對于Adaboost的弱分類函數,衆多部落格基本是上直接給出訓練後的線性函數(感覺那些部落格裡簡單的事例都能目測出幾個弱分類函數),可能是為了友善了解讀者Adaboost的過程,這些細枝末節沒有進行詳細贅述,但是對于菜鳥而言,還是需要知道這個弱分類器是怎麼得來的,因為這是後面進行Adaboost的前提,是以本文想嘗試剖析其過程。本文打算用一些簡單的資料進行計算(借鑒的這篇部落格的資料https://blog.csdn.net/guyuealian/article/details/70995333),如下所示:

序号 1 2 3 4 5 6 7 8 9 10
樣本點X (1,5) (2,2) (3,1) (4,6) (6,8) (6,5) (7,9) (8,7) (9,8) (10,2)
類别Y 1 1 -1 -1 1 -1 1 1 -1 -1

作圖如下:

Adaboost算法的初步了解

     從圖中可以看出,我們幾乎很難找到一條直線将藍色(1)與橙色(-1)的點進行完全分開,但是我們可以找到一些線性的弱分類器,進行弱分類,很顯然,我們可以找到的弱分類器肯定不止一個,理論上是可以找到無窮多個,但是我們在實際應用中總不能找無窮多個吧,肯定是希望用最少的個數達到想要的效果,對于Adaboost而言,很多的部落格中都是找了3個弱分類器,不知道這樣選擇的個數有什麼依據(不知道是不是自己調研得不夠全面)。大膽猜測,可能是因為先嘗試個數為3的情況,發現效果理想就沒繼續嘗試為4,5,6...的情況。對于弱分類器的基本要求,(1)需要每一個弱分類器滿足準确率超過50%,并且弱分類器的準确率直接影響後面的Adaboost的疊代次數;(2)弱分類器之間的差異性不能太小,如果差異太小,進行組合的實際價值不大,對準确率的提高不會明顯。

問題2

    對于這個問題,進行了簡單的初步了解,由于模型是加法模型,在計算損失函數極小值問題的時候可以進行簡化,采用的是向前分步方法,即:每次計算的時候都隻學習一個基函數和系數,這樣可以簡化目标函數的形式,利于計算。

問題3

強分類器是通過公式:

Adaboost算法的初步了解

對其進行效果的評價的,得到的強分類器可以進行驗證其效果如何。

對于疊代次數,首先需要預設一個很小的錯誤率,當錯誤率低于這個門檻值時,疊代結束。

問題4

     是存在過拟合現象的,維基百科的原話是:In some problems it can be less susceptible to the overfitting problem than other learning algorithms. 并不是說不存在過拟合問題,隻是過拟合問題沒其他的學習算法那麼嚴重。

問題5

    我們拟采用之前問題1中的資料,進行執行個體化,看看該過程是怎麼回事。

算法流程主要是這樣的:

  • 給權值進行初始化,D1=[1/N,1/N,1/N,1/N,1/N,1/N,1/N,1/N,1/N,1/N]=[1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10],即:
序号 1 2 3 4 5 6 7 8 9 10
樣本點X (1,5) (2,2) (3,1) (4,6) (6,8) (6,8) (7,9) (8,7) (9,8) 10,2)
類别Y 1 1 -1 -1 1 -1 1 1 -1 -1
D1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
  • 給出3個弱分類器為H1(x=3.5),H2(x=7.5),H3(y=4)

我們可以明顯的看出,三個弱分類器的err都為0.1+0.1+0.1+0.1=0.4,是以我們可以任意挑一個弱分類器,那就先用H1:

在H1的情況下,誤差率e1=0.4,我們可以使用公式計算得到:

Adaboost算法的初步了解

此時所得的強分類器為G1(x)=sign(0.2027H1),作圖如下:

Adaboost算法的初步了解

從圖中可以看出,疊代一次後的分類效果并沒有提高。

  • 更新權值D:
序号 1 2 3 4 5 6 7 8 9 10
樣本點X (1,5) (2,2) (3,1) (4,6) (6,8) (6,8) (7,9) (8,7) (9,8) 10,2)
類别Y 1 1 -1 -1 1 -1 1 1 -1 -1
D2 1/12 1/12 1/8 1/12 1/8 1/12 1/8 1/8 1/12 1/12

再重新計算每個弱分類器的誤差率

當弱分類器為H1時,err=1/8+1/8+1/8+1/8=1/2;

當弱分類器為H2時,err=1/8+1/12+1/12+1/8=5/12;

當弱分類器為H3時,err=1/12+1/12+1/12+1/12=1/3;

可見,誤差率最小的是H3,是以下一次疊代選用H3:

在H3的情況下,誤差率e2=1/3,我們可以使用公式計算得到:

Adaboost算法的初步了解

此時所得的強分類器為G2(x)=sign(0.2027H1+0.3466H3),作圖如下:

Adaboost算法的初步了解

我們來仔細分析一下,兩條直線分成四個區域,我分别命名為1,2,3,4象限,并分别計算出G2(x)的值,結果如下圖所示:

Adaboost算法的初步了解

    我們從圖中看出,雖然又疊代了一次,但似乎準确率并沒有提高,1象限誤判了一個點,2象限沒有點,3象限誤判了兩個點,4象限誤判了一個點,總共還是誤判了4個點,準确率似乎沒有提高。

  • 更新權值D:
序号 1 2 3 4 5 6 7 8 9 10
樣本點X (1,5) (2,2) (3,1) (4,6) (6,8) (6,8) (7,9) (8,7) (9,8) 10,2)
類别Y 1 1 -1 -1 1 -1 1 1 -1 -1
D3 1/16 1/16 3/16 1/16 3/16 1/16 3/16 3/16 1/16 1/16

再重新計算每個弱分類器的誤差率

當弱分類器為H1時,err=3/16+3/16+3/16+3/16=3/4;

當弱分類器為H2時,err=3/16+1/16+1/16+3/16=1/2;

當弱分類器為H3時,err=1/16+1/16+1/16+1/16=1/4;

可見,誤差率最小的是H3,是以下一次疊代選用H3:

在H3的情況下,誤差率e3=1/4,我們可以使用公式計算得到:

Adaboost算法的初步了解

此時所得的強分類器為G3(x)=sign(0.2027H1+0.3466H3+0.5493H3),作圖如下:

Adaboost算法的初步了解

    我們可以看到并沒有達到預期的效果,我們不妨大膽假設一下,就算再繼續疊代下去n次,效果依然如此,為什麼會出現這樣的情況?症結何在呢?我想,是因我們的弱分類器沒有選擇好,導緻出現這樣的情況。我們選擇的弱分類器H2一直都沒選擇用于疊代,可見弱分類器的選擇是多麼有技巧的事情啊!

    跟部落格(https://blog.csdn.net/guyuealian/article/details/70995333)相比,該作者選擇的弱分類器十分的巧妙,巧妙之處在于初始的誤差率就比較低,而且,在第二次疊代的時候可以剛好讓H2作為第二次疊代,這樣不僅可以快速的達到預期的結果,而且不會出現本文中這樣的不收斂的情況。

    關于adaboost的應用十分廣泛,有文本識别、圖像識别等領域,特别是圖像識别領域,從國外的文獻看,很多年以前就已經很成熟了。

繼續閱讀