1. 程式人生 > >如何利用AdaBoost提高分類效能

如何利用AdaBoost提高分類效能

AdaBoost屬於元演算法,不同於傳統的單分類器(決策樹、樸素貝葉斯、SVM等),它是多個分類器的組合,共同決定預測結果。而且適用數值型和標稱型(類別)資料。工作流程如下:

  • 對於訓練資料中的每個樣本資料,賦予其一個權重,這些權重構成了向量D,初始時權重都化為相等值。Di=1
  • 在訓練資料上訓練出一個弱分類器,並計算該分類器的錯誤率,然後在同一資料集上再次訓練弱分類器,直到錯誤率為零。

工作流程就是這樣,但是還要注意幾點:

  • 在分類器第二次訓練中,會重新調整每個樣本的權重,其中第一次分對的樣本的權重會降低,而第一次分錯的樣本的權重會提高(目的是下次重點關注錯誤樣本,儘量使其分對)
  • 傳統單分類器都可以作為弱分類器,AdaBoost選取單層決策樹作為弱分類器。單層決策樹就是僅針對一個特徵來做決策,算上根節點只有兩層,類標籤有幾個就有幾個分支。以收入作為特徵,類標籤為研究生和本科生,分支就為兩個,決策判斷就是收入大於是否10K,最終構建如圖:
    這裡寫圖片描述
  • 為了從所有弱分類器中得到最終的分類結果,AdaBoost給每個分類器都分配了一個權重值α,即帶不同權重的分類器共同決定分類結果。

簡言之,對於AdaBoost要記住兩點:

  • AdaBoost分類的結果是基於所有分類器的加權求和得到的,每個分類器的權重不等,權重代表的是其對應分類器在上一輪迭代中的成功度。
  • adaboost是通過集中關注被已有分類器錯分的那些資料來獲得新的分類器。

然後我們從演算法角度說明AdaBoost包含4個核心部分。

  • 首先給出訓練資料集,關於性別預測,給出收入和上網時間兩個特徵。
    這裡寫圖片描述
  • 構建單層決策樹。單層決策樹的目的是從若干特徵中選出錯誤率最小的那個特徵(對結果影響最大),並返回預測結果和錯誤率。其實特別簡單:對於樣本一(1,2,1.3,1,2),我構建的決策樹就是找個閾值,大於該閾值將樣本一中的元素劃分到類別1,小於(等)該閾值將樣本一中的元素劃分到類別-1,這就是一顆決策樹。然後我麼要注意的是閾值要動態調整,最好有固定步長,來使得預測分類的錯誤率最小(目標)。

    講到這,弱分類基本上就算是建好了,但是我們還有一個細節沒有說,那就是錯誤率的計算需要算上樣本的向量權重D,也就是說由於每個樣本元素的權重不同,最終的錯誤率應該是加權錯誤率。以樣本一為例(D=[0.2,0.2,0.2,0.2,0.2]),閾值為1.3時,其預測分類結果為(-1,1,-1,-1,1),而正確分類結果為(1,1,-1,-1,1)。大家可以看到第一資料被分錯了,這樣加權錯誤率為0.2*1=0.2。同理,若樣本權重向量D=(0.1,0.3,0.2,0.3,0.1),預測分類結果為(1,-1,1,-1,1),加權錯誤率為0.3×1+0.2×1=0.5
    這裡寫圖片描述

  • 基於單層決策樹的AdaBoost訓練過程:
    這裡寫圖片描述

訓練過程解釋說明:

  1. 單層決策樹會根據D返回加權錯誤率以及預測的分類結果,該分類結果就是分類器。
  2. 通過錯誤率ε可以計算出分類器的權重α:
    α=12ln(1ϵϵ)
  3. α結合單層決策樹預測的分類結果(分類器),共同產生新的預測結果,與正確類標籤進行比對得出新的錯誤率(此時的錯誤率是加權分類器產生的預測結果與正確類標籤比對的,比對時不加權值),判斷是否為0決策是否繼續迭代。
  4. 若不為0,觸發分類器權重α得出新的權重向量D:
    D(t+1)i=DtieαSum(D)錯誤分類
    D(t+1)i=DtieαSum(D)正確分類
  5. 由新的權重向量D進行新一輪的迭代,得到新的錯誤率等。AdaBoost的最終返回值是對應不同權重α的分類器集合,也就是說只要不斷迭代,就會有新的α和分類器,可以儲存到一個字典中。
  • 構建完整的AdaBoost分類函式:
    基於單層決策樹的訓練過程得到了多個弱分類器以及對應的α值,現在我們就可以通過這些弱分類器及其權重通過加權求和來預測測試資料啦。
    這裡寫圖片描述

還可以在完整些的,下次給出核心程式碼,然後應用實際資料通過對比KNN、貝葉斯分類畫出效果影象。