【原】关于AdaBoost的一些再思考
一、Decision Stumps:
Decision Stumps稱為單層分類器,主要用作Ensemble Method的組件(弱分類器)。一般只進(jìn)行一次判定,可以包含兩個或者多個葉結(jié)點。對于離散數(shù)據(jù),可以選取該屬性的任意一個數(shù)據(jù)作為判定的分割點;對于連續(xù)數(shù)據(jù),可以選擇屬性的一個閾值做為分割點進(jìn)行判定(大于該閾值分配到一類,小于該閾值分配到另一類;當(dāng)然也可以選取多個閾值并由此得到多個葉結(jié)點)。
?
二、AdaBoost的理解:
1、基本流程
簡單的說,AdaBoost框架就是根據(jù)指定的參數(shù),進(jìn)行輪訓(xùn)練得到個弱分類器及每個弱分類器對應(yīng)的權(quán)重,最后將這些弱分類器的結(jié)果進(jìn)行線性組合得到最終的結(jié)果。
關(guān)于多屬性數(shù)據(jù)集的處理:
在每一輪訓(xùn)練過程中,在每個屬性上根據(jù)分割的閾值不同得到多個單層分類器。在這些從所有屬性上得到的分類器中選取一個帶權(quán)誤差率最小的單層分類器作為該輪訓(xùn)練的弱分類器。
?
2、帶權(quán)分類誤差
在進(jìn)行訓(xùn)練之前,為訓(xùn)練集中的每個樣本分配一個權(quán)重,使用向量表示。在第輪訓(xùn)練結(jié)束后,根據(jù)得到的弱分類器的性能計算該分類器對應(yīng)的權(quán)值,并由的在訓(xùn)練集上的分類結(jié)果對權(quán)重向量進(jìn)行更新。
分類器的性能度量和該分類器在訓(xùn)練集上的結(jié)果,都是通過計算該分類器在訓(xùn)練集上的帶權(quán)分類誤差獲取。所謂帶權(quán)分類誤差,是指將待分類的樣本包含的權(quán)重(此處的權(quán)重就是之前為該樣本分配的權(quán)重),結(jié)合在該數(shù)據(jù)集上的分類誤差得到分類器在該數(shù)據(jù)集上的一個考慮樣本權(quán)重的分類誤差,其定義如下:
???????????????????????????????? (1.1)
其中,表示第個弱分類器的帶權(quán)分類誤差值,表示第次更新后樣本的權(quán)重,表示使用第個弱分類器對樣本的分類結(jié)果,表示樣本的真實標(biāo)簽,是一個指示函數(shù),其值如下:
?????????????????????????? (1.2)
通過公式(1.1)和(1.2)可以看出帶權(quán)分類誤差與兩方面的因素相關(guān):
1) 分類器在樣本上的誤差值;
2) 樣本集中每個樣本的權(quán)重;
注意:AdaBoost就是通過該值與弱分類器產(chǎn)生關(guān)系。
?
3、帶權(quán)分類誤差再分析
以DS(Decision Stumps)弱分類器為例,對于一個數(shù)據(jù)集包含多個屬性,要在該數(shù)據(jù)集上學(xué)習(xí)一個DS,可以使用不同的屬性作為分割判斷條件。對于同一個屬性,也可以選擇多個不同的分割點(離散型)/閾值(連續(xù)性)作為判斷條件。因此,對于一個數(shù)據(jù)集實質(zhì)上可以產(chǎn)生很多不同的DS,那么究竟選擇哪一個DS作為我們從該數(shù)據(jù)集上最終學(xué)習(xí)得到的弱分類器?
很直觀的想法,我們可以使用窮舉產(chǎn)生所有的DS,然后分別計算每個DS的分類誤差,選擇具有最小分類誤差的DS作為從該數(shù)據(jù)集上學(xué)習(xí)到的弱分類器。然而,問題出在我們學(xué)習(xí)的這個數(shù)據(jù)集中的所有樣本權(quán)重(此處可以理解為每個樣本的價值、貢獻(xiàn)度等)并不相同。我們在考慮選擇哪個DS最為最終的弱分類器時不但要考慮該DS的分類錯誤率,還要考慮每個樣本的權(quán)重問題,因為將高權(quán)重的樣本分錯造成的后果遠(yuǎn)比將低權(quán)重樣本分錯更為嚴(yán)重。
考慮公式(1.1)中帶權(quán)分類誤差的定義,該指標(biāo)有效的將分類器的分類誤差和待分類樣本的權(quán)重結(jié)合起來,因此可以作為選擇弱分類器時的一個標(biāo)準(zhǔn)使用。
總結(jié)起來簡單的說,帶權(quán)分類誤差將分類器的分類誤差和樣本本身的權(quán)重進(jìn)行結(jié)合,可以作為模型選擇的一個標(biāo)準(zhǔn)使用。
?
4、弱分類器的權(quán)重計算
弱分類器對應(yīng)的權(quán)重與其本身的帶權(quán)分類誤差相關(guān),其計算公式如下:
????????????????????????????????????????? (1.3)
通過簡單分析可以知道,帶權(quán)分類誤差的范圍是[0,1],繪制分類器的權(quán)重函數(shù)的圖像,如下所示:
Fig. 1. 弱分類器權(quán)重函數(shù)分布
由Fig. 1.可以看出,弱分類器的權(quán)重與其對應(yīng)的帶權(quán)分類誤差呈反比關(guān)系,即就是帶權(quán)分類誤差越小,該分類器對應(yīng)的權(quán)值越大;反之亦然。
?
5、訓(xùn)練樣本的權(quán)重更新
訓(xùn)練得到新的弱分類器后需要對樣本權(quán)值進(jìn)行更新,更新的公式如下:
?????????????????????????????????????????? (1.4)
公式(1.4)定義了計算弱分類器對應(yīng)的權(quán)值后,對樣本的權(quán)重更新過程。如果該分類器在該樣本上分類正確,則降低該樣本的權(quán)值;如果分類錯誤,則提高該樣本的權(quán)值。公式中前半部分主要用于對整個權(quán)值向量進(jìn)行歸一化,以使其和為1。
?
6、參考
維基百科關(guān)于AdaBoost算法的介紹:
用 xi 和 yi 表示原始樣本集D的樣本點和它們的類標(biāo)(注意,yi的取值只能是+1或-1)。用 Wk(i) 表示第k次迭代時全體樣本的權(quán)重分布。這樣就有如下所示的AdaBoost算法:
1. begin initial D={x1,y1,...,xn,yn},kmax(最大循環(huán)次數(shù)),Wk(i)=1/n,i=1,...,n
2. k ← 0
3. do k ← k+1
4. 訓(xùn)練使用按照 Wk(i) 采樣的 D 的弱學(xué)習(xí)器 Ck
5. Ek ← 對使用 Wk(i) 的 D 測量的 Ck 的訓(xùn)練誤差
6.
7.
8. until k=kmax
9. return Ck和αk,k=1,...,kmax(帶權(quán)值分類器的總體)
10. end
注意第5行中,當(dāng)前權(quán)重分布必須考慮到分類器 Ck 的誤差率。在第7行中, Zk 只是一個歸一化系數(shù),使得 Wk(i) 能夠代表一個真正的分布,而 hk(xi) 是分量分類器 Ck 給出的對任一樣本點 xi 的標(biāo)記(+1或-1),hk(xi) = yi 時,樣本被正確分類。第8行中的迭代停止條件可以被換為判斷當(dāng)前誤差率是否小于一個閾值。
最后的總體分類的判決可以使用各個分量分類器加權(quán)平均來得到:
這樣,最后對分類結(jié)果的判定規(guī)則是:
?
三、整體流程再梳理
按照自己的理解將AdaBoost的框架再進(jìn)行梳理一遍,整個Boost框架分為兩部分:訓(xùn)練和分類。
假設(shè)樣本的類別為:
1、訓(xùn)練部分
a) 為訓(xùn)練集中每個樣本分配權(quán)重;
b) 訓(xùn)練弱分類器;
c) 計算帶權(quán)分類誤差;
d) 計算弱分類器對應(yīng)的權(quán)重
e) 更新樣本權(quán)重
最終得到個不同的弱分類器及其對應(yīng)的權(quán)重。
?
2、分類部分
a) 對待分類樣本計算函數(shù)
b) 對該樣本最終的分類結(jié)果為
?
四、核心問題再討論
?
1、帶權(quán)分類誤差的作用:
在第二部分詳細(xì)討論了帶權(quán)樣本誤差的生成機制問題,描述了如何計算帶權(quán)樣本誤差和它怎樣對AdaBoost框架產(chǎn)生影響。這里,將帶權(quán)樣本誤差的作用再做以簡單的總結(jié),帶權(quán)分類誤差的主要作用有兩個:
1、 在訓(xùn)練弱分類器時,使用該指標(biāo)在訓(xùn)練的多個DS中選擇帶權(quán)分類誤差最小的最為該輪訓(xùn)練的弱分類器;
2、 在AdaBoost框架中,使用該指標(biāo)計算該輪訓(xùn)練得到的弱分類器對應(yīng)的權(quán)值;
?
2、弱分類器的誤差和AdaBoost框架的誤差:
實質(zhì)上,在整個訓(xùn)練的過程中,每輪訓(xùn)練得到的弱分類器可能一直會存在分類錯誤的問題(不論訓(xùn)練了多少輪,生成的單個弱分類器都有分類錯誤),然而整個AdaBoost框架卻有可能快速收斂(整個AdaBoost框架的錯誤率為0)。造成這個現(xiàn)象的原因是:
每輪訓(xùn)練結(jié)束后,AdaBoost框架會對樣本的權(quán)重進(jìn)行調(diào)整,該調(diào)整的結(jié)果是越到后面被錯誤分類的樣本權(quán)重會越高。這樣到后面,單個弱分類器為了達(dá)到較低的帶權(quán)分類誤差都會把樣本權(quán)重高的樣本分類正確。雖然單獨來看,單個弱分類器仍會造成分類錯誤,但這些被錯誤分類的樣本的權(quán)重都較低,在AdaBoost框架的最后輸出時會被前面正確分類的高權(quán)重弱分類器“平衡”掉。這樣造成的結(jié)果就是,雖然每個弱分類器可能都有分錯的樣本,然而整個AdaBoost框架卻能保證對每個樣本進(jìn)行正確分類,從而實現(xiàn)快速收斂。
轉(zhuǎn)載于:https://www.cnblogs.com/chaosimple/p/4029795.html
總結(jié)
以上是生活随笔為你收集整理的【原】关于AdaBoost的一些再思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每一件事情的开始总是很困难的!
- 下一篇: IDEA导出jar包步骤