菜鳥初次接觸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 |
作圖如下:
從圖中可以看出,我們幾乎很難找到一條直線将藍色(1)與橙色(-1)的點進行完全分開,但是我們可以找到一些線性的弱分類器,進行弱分類,很顯然,我們可以找到的弱分類器肯定不止一個,理論上是可以找到無窮多個,但是我們在實際應用中總不能找無窮多個吧,肯定是希望用最少的個數達到想要的效果,對于Adaboost而言,很多的部落格中都是找了3個弱分類器,不知道這樣選擇的個數有什麼依據(不知道是不是自己調研得不夠全面)。大膽猜測,可能是因為先嘗試個數為3的情況,發現效果理想就沒繼續嘗試為4,5,6...的情況。對于弱分類器的基本要求,(1)需要每一個弱分類器滿足準确率超過50%,并且弱分類器的準确率直接影響後面的Adaboost的疊代次數;(2)弱分類器之間的差異性不能太小,如果差異太小,進行組合的實際價值不大,對準确率的提高不會明顯。
問題2
對于這個問題,進行了簡單的初步了解,由于模型是加法模型,在計算損失函數極小值問題的時候可以進行簡化,采用的是向前分步方法,即:每次計算的時候都隻學習一個基函數和系數,這樣可以簡化目标函數的形式,利于計算。
問題3
強分類器是通過公式:
對其進行效果的評價的,得到的強分類器可以進行驗證其效果如何。
對于疊代次數,首先需要預設一個很小的錯誤率,當錯誤率低于這個門檻值時,疊代結束。
問題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,我們可以使用公式計算得到:
此時所得的強分類器為G1(x)=sign(0.2027H1),作圖如下:
從圖中可以看出,疊代一次後的分類效果并沒有提高。
- 更新權值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,我們可以使用公式計算得到:
此時所得的強分類器為G2(x)=sign(0.2027H1+0.3466H3),作圖如下:
我們來仔細分析一下,兩條直線分成四個區域,我分别命名為1,2,3,4象限,并分别計算出G2(x)的值,結果如下圖所示:
我們從圖中看出,雖然又疊代了一次,但似乎準确率并沒有提高,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,我們可以使用公式計算得到:
此時所得的強分類器為G3(x)=sign(0.2027H1+0.3466H3+0.5493H3),作圖如下:
我們可以看到并沒有達到預期的效果,我們不妨大膽假設一下,就算再繼續疊代下去n次,效果依然如此,為什麼會出現這樣的情況?症結何在呢?我想,是因我們的弱分類器沒有選擇好,導緻出現這樣的情況。我們選擇的弱分類器H2一直都沒選擇用于疊代,可見弱分類器的選擇是多麼有技巧的事情啊!
跟部落格(https://blog.csdn.net/guyuealian/article/details/70995333)相比,該作者選擇的弱分類器十分的巧妙,巧妙之處在于初始的誤差率就比較低,而且,在第二次疊代的時候可以剛好讓H2作為第二次疊代,這樣不僅可以快速的達到預期的結果,而且不會出現本文中這樣的不收斂的情況。
關于adaboost的應用十分廣泛,有文本識别、圖像識别等領域,特别是圖像識别領域,從國外的文獻看,很多年以前就已經很成熟了。