【原】關於AdaBoost的一些再思考

ChaoSimple發表於2014-10-16

一、Decision Stumps:

Decision Stumps稱為單層分類器,主要用作Ensemble Method的元件(弱分類器)。一般只進行一次判定,可以包含兩個或者多個葉結點。對於離散資料,可以選取該屬性的任意一個資料作為判定的分割點;對於連續資料,可以選擇屬性的一個閾值做為分割點進行判定(大於該閾值分配到一類,小於該閾值分配到另一類;當然也可以選取多個閾值並由此得到多個葉結點)。

 

二、AdaBoost的理解:

1、基本流程

簡單的說,AdaBoost框架就是根據指定的引數clip_image002c837a63a-9c13-4dde-9a65-d3eab98da80f,進行clip_image00238247447-ab8e-455c-bdf9-8e18697d823f輪訓練得到clip_image002e665e325-682a-463d-ae7a-2dd539e819a5個弱分類器clip_image004f1a5b3d3-5c7d-463d-b7ed-95f116a6e53d及每個弱分類器對應的權重clip_image0065d78a53e-2f09-4766-b586-04c7ce7cb1b0,最後將這些弱分類器的結果進行線性組合得到最終的結果。

關於多屬性資料集的處理:

在每一輪訓練過程中,在每個屬性上根據分割的閾值不同得到多個單層分類器。在這些從所有屬性上得到的分類器中選取一個帶權誤差率最小的單層分類器作為該輪訓練的弱分類器。

 

2、帶權分類誤差

在進行訓練之前,為訓練集中的每個樣本分配一個權重,使用向量clip_image008b1806c27-78d1-48b4-b916-b7ad9b31947e表示。在第clip_image010b1f124c2-3fc4-4e90-8810-1c2ef60d89ab輪訓練結束後,根據得到的弱分類器clip_image004e9268b1b-cd3c-457d-a2fa-d36cbc4d1420的效能計算該分類器clip_image004e04f18c0-ec55-4a98-92cb-a76678b8819a對應的權值clip_image0068d9c72cf-ff9a-4aae-9fbe-a1ce0932f3e3,並由clip_image004d1ae03db-eebf-4e1e-a1b6-c402cde31cdc的在訓練集上的分類結果對權重向量clip_image014b1fc748d-4865-4130-b59c-634242a4f24f進行更新。

分類器clip_image004ffe2c067-932a-46dc-98e0-297d57524cd5的效能度量和該分類器在訓練集上的結果,都是通過計算該分類器在訓練集上的帶權分類誤差獲取。所謂帶權分類誤差,是指將待分類的樣本包含的權重(此處的權重就是之前為該樣本分配的權重),結合在該資料集上的分類誤差得到分類器在該資料集上的一個考慮樣本權重的分類誤差,其定義如下:

clip_image002[9]                                 (1.1)

其中,clip_image01888248a36-ef9c-4f93-91ce-36fac03b9179表示第clip_image010abe83df3-9505-4c1a-80dd-88657ecef591個弱分類器的帶權分類誤差值,clip_image021bdb478f1-afcd-4c38-8b0d-2af7ff0be1da表示第clip_image0100e881f9a-4c01-448c-9ecf-63053323e079次更新後樣本clip_image023c4dac779-84bb-4a49-88ce-6e8c64d945cf的權重,clip_image025c4f68032-fc6c-4016-a0f6-42ed21db5b47表示使用第clip_image0109514886c-e704-49c1-a3d2-3d251b4b9659個弱分類器對樣本clip_image023bfbf33a0-ed0c-47a0-adf8-466a75d126e1的分類結果,clip_image027c45a3c9b-f997-46a0-8453-b4b958ba30a8表示樣本clip_image0237c45b25f-9427-4abf-b14f-eaf2228eebd2的真實標籤,clip_image029c77b4e40-b6f5-4d95-8aa3-de013a320557是一個指示函式,其值如下:

clip_image03121a0c071-8d45-4e0c-aab9-a4ea6fcc4e90                           (1.2)

通過公式(1.1)和(1.2)可以看出帶權分類誤差clip_image018e7582f61-0d4f-46ff-b055-35e5a2289c6f與兩方面的因素相關:

1) 分類器在樣本上的誤差值;

2) 樣本集中每個樣本的權重;

注意:AdaBoost就是通過該值與弱分類器產生關係。

 

3、帶權分類誤差再分析

以DS(Decision Stumps)弱分類器為例,對於一個資料集包含多個屬性,要在該資料集上學習一個DS,可以使用不同的屬性作為分割判斷條件。對於同一個屬性,也可以選擇多個不同的分割點(離散型)/閾值(連續性)作為判斷條件。因此,對於一個資料集實質上可以產生很多不同的DS,那麼究竟選擇哪一個DS作為我們從該資料集上最終學習得到的弱分類器?

很直觀的想法,我們可以使用窮舉產生所有的DS,然後分別計算每個DS的分類誤差,選擇具有最小分類誤差的DS作為從該資料集上學習到的弱分類器。然而,問題出在我們學習的這個資料集中的所有樣本權重(此處可以理解為每個樣本的價值、貢獻度等)並不相同。我們在考慮選擇哪個DS最為最終的弱分類器時不但要考慮該DS的分類錯誤率,還要考慮每個樣本的權重問題,因為將高權重的樣本分錯造成的後果遠比將低權重樣本分錯更為嚴重。

考慮公式(1.1)中帶權分類誤差clip_image01862093f6f-04b6-44d2-a880-57f52c5d9352的定義,該指標有效的將分類器的分類誤差和待分類樣本的權重結合起來,因此可以作為選擇弱分類器時的一個標準使用。

總結起來簡單的說,帶權分類誤差clip_image018db5ea93e-955a-48f5-93a1-fc516204d89e將分類器的分類誤差和樣本本身的權重進行結合,可以作為模型選擇的一個標準使用。

 

4、弱分類器的權重計算

弱分類器clip_image002[5]對應的權重clip_image004[5]與其本身的帶權分類誤差相關,其計算公式如下:

clip_image006[5]                                          (1.3)

通過簡單分析可以知道,帶權分類誤差的範圍是[0,1],繪製分類器的權重函式的影象,如下所示:

clip_image008[5]

Fig. 1. 弱分類器權重函式分佈

Fig. 1.可以看出,弱分類器的權重與其對應的帶權分類誤差呈反比關係,即就是帶權分類誤差越小,該分類器對應的權值越大;反之亦然。

 

5、訓練樣本的權重更新

訓練得到新的弱分類器clip_image0041ab7fbcf-56ee-4616-b309-a59c6bab7440後需要對樣本權值clip_image035a1f06846-9712-4e07-ab08-690fbfa58509進行更新,更新的公式如下:

clip_image037b3eced21-0ef4-46f3-b5bc-1e96bb7c6af7                                           (1.4)

公式(1.4)定義了計算弱分類器clip_image0049295fa61-9f5a-4a26-ab9f-5b3c3b05a002對應的權值clip_image006703d11ca-a1c6-4e62-9ca3-f1788536a49f後,對樣本clip_image0239dabe373-a7c4-4160-adaa-a5ca6df1c667的權重更新過程。如果該分類器在該樣本上分類正確,則降低該樣本的權值;如果分類錯誤,則提高該樣本的權值。公式中前半部分clip_image04128cbbc2a-9b35-4bc1-b26d-2bb1b00e87c7clip_image043c1f9df6c-29b3-4a9f-b12e-df9948e8eab8主要用於對整個權值向量進行歸一化,以使其和為1。

 

6、參考

維基百科關於AdaBoost演算法的介紹:

用 xi 和 yi 表示原始樣本集D的樣本點和它們的類標(注意,yi的取值只能是+1或-1)。用 Wk(i) 表示第k次迭代時全體樣本的權重分佈。這樣就有如下所示的AdaBoost演算法:

1. begin initial D={x1,y1,...,xn,yn},kmax(最大迴圈次數),Wk(i)=1/n,i=1,...,n

2. k ← 0

3. do k ← k+1

4. 訓練使用按照 Wk(i) 取樣的 D 的弱學習器 Ck

5. Ek ← 對使用 Wk(i) 的 D 測量的 Ck 的訓練誤差

6. clip_image044972658ef-8963-4f3b-8e5b-79d99c500776

7. clip_image045c1650ba7-f892-4a66-b9d4-dd39050ffa5f

8. until k=kmax

9. return Ck和αk,k=1,...,kmax(帶權值分類器的總體)

10. end

注意第5行中,當前權重分佈必須考慮到分類器 Ck 的誤差率。在第7行中, Zk 只是一個歸一化係數,使得 Wk(i) 能夠代表一個真正的分佈,而 hk(xi) 是分量分類器 Ck 給出的對任一樣本點 xi 的標記(+1或-1),hk(xi) = yi 時,樣本被正確分類。第8行中的迭代停止條件可以被換為判斷當前誤差率是否小於一個閾值。

最後的總體分類的判決可以使用各個分量分類器加權平均來得到:

clip_image046a3145377-128f-43f4-a5e4-68518f999109

這樣,最後對分類結果的判定規則是:

clip_image047baa0390d-7d38-451e-aa70-2a8ff40c7f62

 

三、整體流程再梳理

按照自己的理解將AdaBoost的框架再進行梳理一遍,整個Boost框架分為兩部分:訓練和分類。

假設樣本的類別為:clip_image002

1、訓練部分

a) 為訓練集中每個樣本分配權重clip_image004

b) 訓練弱分類器clip_image006

c) 計算帶權分類誤差clip_image008

d) 計算弱分類器對應的權重clip_image010

e) 更新樣本權重clip_image012

最終得到clip_image014個不同的弱分類器及其對應的權重。 clip_image016

 

2、分類部分

a) 對待分類樣本clip_image018計算函式clip_image020

b) 對該樣本最終的分類結果為clip_image022

 

四、核心問題再討論

 

1、帶權分類誤差的作用:

在第二部分詳細討論了帶權樣本誤差的生成機制問題,描述瞭如何計算帶權樣本誤差和它怎樣對AdaBoost框架產生影響。這裡,將帶權樣本誤差的作用再做以簡單的總結,帶權分類誤差的主要作用有兩個:

1、 在訓練弱分類器時,使用該指標在訓練的多個DS中選擇帶權分類誤差最小的最為該輪訓練的弱分類器;

2、 在AdaBoost框架中,使用該指標計算該輪訓練得到的弱分類器對應的權值;

 

2、弱分類器的誤差和AdaBoost框架的誤差:

實質上,在整個訓練的過程中,每輪訓練得到的弱分類器可能一直會存在分類錯誤的問題(不論訓練了多少輪,生成的單個弱分類器都有分類錯誤),然而整個AdaBoost框架卻有可能快速收斂(整個AdaBoost框架的錯誤率為0)。造成這個現象的原因是:

每輪訓練結束後,AdaBoost框架會對樣本的權重進行調整,該調整的結果是越到後面被錯誤分類的樣本權重會越高。這樣到後面,單個弱分類器為了達到較低的帶權分類誤差都會把樣本權重高的樣本分類正確。雖然單獨來看,單個弱分類器仍會造成分類錯誤,但這些被錯誤分類的樣本的權重都較低,在AdaBoost框架的最後輸出時會被前面正確分類的高權重弱分類器“平衡”掉。這樣造成的結果就是,雖然每個弱分類器可能都有分錯的樣本,然而整個AdaBoost框架卻能保證對每個樣本進行正確分類,從而實現快速收斂。

相關文章