Boosting算法(一)


本章全部來自於李航的《統計學》以及他的博客和自己試驗。僅供個人復習使用。

Boosting算法通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類性能。我們以AdaBoost為例。

 

 

它的自適應在於:前一個弱分類器分錯的樣本的權值(樣本對應的權值)會得到加強,權值更新后的樣本再次被用來訓練下一個新的弱分類器。

        在每輪訓練中,用總體(樣本總體)訓練新的弱分類器,產生新的樣本權值、該弱分類器的話語權,一直迭代直到達到預定的錯誤率或達到指定的最大迭代次數。

 

有兩個問題需要回答:

1.每一輪如何改變訓練數據的權重或者是概率分布

    =>提高那些被前一輪若分類器錯誤分類樣本的權重,而降低那些被正確分類樣本的權重值,

      so那些沒有得到正確分類的數據由於其權重值加大而受到后一輪的弱分類器的更大關注。於是分類問題被一系列的弱分類器“分而治之”

2.如何將如分類器組合成一個強分類器

    =>弱分類器的組合,adaboost采取加權多數的表決方法:加大分類誤差小的分類器的權值,使其在表決中起較大的作用,減少分類誤差率大的弱分類器的權值,使其在變絕種起較小的作用。

 

那我們總結一下:

(1)初始化訓練數據(每個樣本)的權值分布:如果有N個樣本,則每一個訓練的樣本點最開始時都被賦予相同的權重:1/N。

(2)訓練弱分類器。具體訓練過程中,如果某個樣本已經被准確地分類,那么在構造下一個訓練集中,它的權重就被降低;相反,如果某個樣本點沒有被准確地分類,那么它的權重就得到提高。

    同時,得到弱分類器對應的話語權。然后,更新權值后的樣本集被用於訓練下一個分類器,整個訓練過程如此迭代地進行下去。 

(3)將各個訓練得到的弱分類器組合成強分類器。各個弱分類器的訓練過程結束后,分類誤差率小的弱分類器的話語權較大,其在最終的分類函數中起着較大的決定作用,

    而分類誤差率大的弱分類器的話語權較小,其在最終的分類函數中起着較小的決定作用。換言之,誤差率低的弱分類器在最終分類器中占的比例較大,反之較小。

 

迭代過程1

對於m=1,在權值分布為D1(10個數據,每個數據的權值皆初始化為0.1)的訓練數據上,經過計算可得:

閾值v取2.5時誤差率為0.3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率為0.3),
閾值v取5.5時誤差率最低為0.4(x < 5.5時取1,x > 5.5時取-1,則3 4 5 6 7 8皆分錯,誤差率0.6大於0.5,不可取。故令x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率為0.4),
閾值v取8.5時誤差率為0.3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率為0.3)。
可以看到,無論閾值v取2.5,還是8.5,總得分錯3個樣本,故可任取其中任意一個如2.5,弄成第一個基本分類器為:

 

 

上面說閾值v取2.5時則6 7 8分錯,所以誤差率為0.3,更加詳細的解釋是:因為樣本集中

0 1 2對應的類(Y)是1,因它們本身都小於2.5,所以被G1(x)分在了相應的類“1”中,分對了。
3 4 5本身對應的類(Y)是-1,因它們本身都大於2.5,所以被G1(x)分在了相應的類“-1”中,分對了。
但6 7 8本身對應類(Y)是1,卻因它們本身大於2.5而被G1(x)分在了類"-1"中,所以這3個樣本被分錯了。
9本身對應的類(Y)是-1,因它本身大於2.5,所以被G1(x)分在了相應的類“-1”中,分對了。
從而得到G1(x)在訓練數據集上的誤差率(被G1(x)誤分類樣本“6 7 8”的權值之和)e1=P(G1(xi)≠yi) = 3*0.1 = 0.3。

然后根據誤差率e1計算G1的系數:

 

 

這個a1代表G1(x)在最終的分類函數中所占的權重,為0.4236。
接着更新訓練數據的權值分布,用於下一輪迭代:


值得一提的是,由權值更新的公式可知,每個樣本的新權值是變大還是變小,取決於它是被分錯還是被分正確。

即如果某個樣本被分錯了,則yi * Gm(xi)為負,負負得正,結果使得整個式子變大(樣本權值變大),否則變小。

第一輪迭代后,最后得到各個數據新的權值分布D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。由此可以看出,因為樣本中是數據“6 7 8”被G1(x)分錯了,所以它們的權值由之前的0.1增大到0.1666,反之,其它數據皆被分正確,所以它們的權值皆由之前的0.1減小到0.0715。

分類函數f1(x)= a1*G1(x) = 0.4236G1(x)。

此時,得到的第一個基本分類器sign(f1(x))在訓練數據集上有3個誤分類點(即6 7 8)。

    從上述第一輪的整個迭代過程可以看出:被誤分類樣本的權值之和影響誤差率,誤差率影響基本分類器在最終分類器中所占的權重。

  迭代過程2

對於m=2,在權值分布為D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的訓練數據上,經過計算可得:

閾值v取2.5時誤差率為0.1666*3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率為0.1666*3),
閾值v取5.5時誤差率最低為0.0715*4(x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率為0.0715*3 + 0.0715),
閾值v取8.5時誤差率為0.0715*3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率為0.0715*3)。
所以,閾值v取8.5時誤差率最低,故第二個基本分類器為:

 

面對的還是下述樣本:

 

 

很明顯,G2(x)把樣本“3 4 5”分錯了,根據D2可知它們的權值為0.0715, 0.0715,  0.0715,所以G2(x)在訓練數據集上的誤差率e2=P(G2(xi)≠yi) = 0.0715 * 3 = 0.2143。

計算G2的系數:

 

 

更新訓練數據的權值分布:

D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)。被分錯的樣本“3 4 5”的權值變大,其它被分對的樣本的權值變小。
f2(x)=0.4236G1(x) + 0.6496G2(x)

 

此時,得到的第二個基本分類器sign(f2(x))在訓練數據集上有3個誤分類點(即3 4 5)。

 

  迭代過程3

對於m=3,在權值分布為D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)的訓練數據上,經過計算可得:

閾值v取2.5時誤差率為0.1060*3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率為0.1060*3),
閾值v取5.5時誤差率最低為0.0455*4(x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率為0.0455*3 + 0.0715),
閾值v取8.5時誤差率為0.1667*3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率為0.1667*3)。
所以閾值v取5.5時誤差率最低,故第三個基本分類器為:

 

依然還是原樣本:

 

此時,被誤分類的樣本是:0 1 2 9,這4個樣本所對應的權值皆為0.0455,

所以G3(x)在訓練數據集上的誤差率e3 = P(G3(xi)≠yi) = 0.0455*4 = 0.1820。

計算G3的系數:

 

更新訓練數據的權值分布:

 

 

D4 = (0.125, 0.125, 0.125, 0.102, 0.102,  0.102, 0.065, 0.065, 0.065, 0.125)。被分錯的樣本“0 1 2 9”的權值變大,其它被分對的樣本的權值變小。

f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)

此時,得到的第三個基本分類器sign(f3(x))在訓練數據集上有0個誤分類點。至此,整個訓練過程結束。

    現在,咱們來總結下3輪迭代下來,各個樣本權值和誤差率的變化,如下所示(其中,樣本權值D中加了下划線的表示在上一輪中被分錯的樣本的新權值):

訓練之前,各個樣本的權值被初始化為D1 = (0.1, 0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1);
第一輪迭代中,樣本“6 7 8”被分錯,對應的誤差率為e1=P(G1(xi)≠yi) = 3*0.1 = 0.3,此第一個基本分類器在最終的分類器中所占的權重為a1 = 0.4236。第一輪迭代過后,樣本新的權值為D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715);
第二輪迭代中,樣本“3 4 5”被分錯,對應的誤差率為e2=P(G2(xi)≠yi) = 0.0715 * 3 = 0.2143,此第二個基本分類器在最終的分類器中所占的權重為a2 = 0.6496。第二輪迭代過后,樣本新的權值為D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455);
第三輪迭代中,樣本“0 1 2 9”被分錯,對應的誤差率為e3 = P(G3(xi)≠yi) = 0.0455*4 = 0.1820,此第三個基本分類器在最終的分類器中所占的權重為a3 = 0.7514。第三輪迭代過后,樣本新的權值為D4 = (0.125, 0.125, 0.125, 0.102, 0.102,  0.102, 0.065, 0.065, 0.065, 0.125)。
    從上述過程中可以發現,如果某些個樣本被分錯,它們在下一輪迭代中的權值將被增大,同時,其它被分對的樣本在下一輪迭代中的權值將被減小。就這樣,分錯樣本權值增大,分對樣本權值變小,而在下一輪迭代中,總是選取讓誤差率最低的閾值來設計基本分類器,所以誤差率e(所有被Gm(x)誤分類樣本的權值之和)不斷降低。

    綜上,將上面計算得到的a1、a2、a3各值代入G(x)中,G(x) = sign[f3(x)] = sign[ a1 * G1(x) + a2 * G2(x) + a3 * G3(x) ],得到最終的分類器為:

G(x) = sign[f3(x)] = sign[ 0.4236G1(x) + 0.6496G2(x)+0.7514G3(x) ]。

其實上面還有一點我沒有指出就是弱分類器的指定:

弱分類器是提前給出的,或者說是提前訓練的。

adaboost中弱分類器的設計還是很重要的:我看了幾篇博客和論文以下幾點

1任何分類器都行,但要是弱分類器,記得一篇論文中說如果是強分類器會影響最終訓練性能,但沒有試過。簡單點可以用decision stump,其實就是一個判斷,如果特征符合某個條件則為a類,否則是b類。其他決策樹也行,至於使用不同分類器是不是有很大區別,沒有做過實驗不敢妄言,但肯定會有性能差別的。

2AdaBoost算法里面 要求弱分類器正確率>50%並且各個弱分類器相互獨立 可是如果弱分類器錯誤率均在50%以下,但不完全獨立 會造成什么樣的后果呢?,弱分類器用最小平方誤差,最小平方誤差的錯誤率應該是50%以下的,可是調整權值會使分類器不獨立(也可能不是,因為弱分類器是重新調整權值后重新計算的,跟上一次應該不算線形相關。在AdaBoost算法描述本身,也是用的調整權值來做的 ,說明這樣的權值調整,並不會使弱分類器變得相關,不然,AdaBoost算法這么大的漏洞,不可能被廣泛應用的),有說會讓組合后的分類器錯誤率>50%而退出~ 可是我覺得不會,迭代算法應該能保證其越來越優,只是可能一直到不了錯誤率<0附近的值的狀態。

3參考博客《談談對Gentle Adaboost的一點理解》給到很多對弱分類器的設計思考

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM