本博客內容摘自李航老師的《統計學習方法》,加以一些整理。
相關概念
提升(boosting)方法是一種常用的統計學習方法,應用廣泛且有效。在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類的性能。
對於分類問題而言,給定一個訓練集,求比較粗糙的分類規則(弱分類器)要比求精確的分類規則(強分類器)容易得多。提升(booting)方法就是從弱學習算法出發,反覆學習,得到一系列弱分類器(又稱爲基本分類器),然後組合這些弱分類器,構成一個強分類器。大多數的提升方法都是改變訓練數據的概率分佈(訓練數據的權值分佈),針對不同的訓練數據分佈調用弱學習算法學習一系列弱分類器。
所以對於提升方法而言,有兩個問題需要解決:一是在每一輪如何改變訓練數據的權值或者概率分佈;二是如何將弱分類器組合成一個強分類器。
對於第一個問題,AdaBoost的做法是,提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。這樣一來,那些沒有得到正確分類的數據,由於其權值的加大而受到後一輪的弱分類器的更大關注。於是,分類問題被一系列的弱分類器”分而治之”。
對於第二個問題,即弱分類器的組合,AdaBoost採取加權多數表決的方法。具體地,加大分類錯誤率小的弱分類器的權重,使其在表決中起較大的作用,減少分類誤差率大的弱分類器的權值,使其在表決中起較小的作用。
AdaBoost算法
假定給定一個二分類的訓練數據集:
其中,每個樣本點由實力和標記組成。實例 (表示實數),標記 ,即有兩種標籤的數據,用 來表示這兩種類別; 是實例空間, 是標記集合。AdaBoost算法利用以下算法,從訓練數據中學習一系列弱分類器或基本分類器,並將這些弱分類器線性組合成一個強分類器。
AdaBoost描述:
輸入:訓練數據集 ,其中 ;得到弱學習算法;
輸出:最終分類器
算法步驟:
(1)初始化訓練數據的權值分佈
D是用來描述各樣本的權值分佈的。
(2)對 , 表示迭代的次數
(a)使用具有權值分佈 的訓練數據集學習,得到基本分類器:
(b)計算 在訓練數據集上的分類誤差率
其中 ,當分類正確時,等於0;分類錯誤時,等於1; 表示第 輪得到的弱分類器 對第 個樣本 的分類結果, 表示第 個樣本的真實類別。注意計算誤差率是用到了權重分佈 中的 。
(c) 計算 的係數
這裏的對數是自然對數。可以發現,當錯誤率 越大時, 越小。這個參數將會用在集成階段。
(d)更新訓練數據集的權值分佈
這裏, 是規範化因子,使得總的 值和爲1.
它使得 成爲一個概率分佈。
(3)構建基本分類器的線性組合
錯誤率越低的弱分類器對應的 值越大,使其在表決中起較大的作用。
得到最終的分類器
對AdaBoost算法作如下說明:
步驟(1)假設訓練數據集具有均勻的權值分佈,即每個訓練樣本在基本分類器的學習中作用相同,這一假設保證第1步能夠在原始數據上學習基本分類器 .
步驟(2)AdaBoost反覆學習基本分類器,在每一輪 順次地執行下列操作:
(a)使用當前分佈 加權的訓練數據集,學習基本分類器 .
(b)計算基本分類器 在加權訓練數據集上的分類錯誤率:
這裏, 表示第 輪中第 個實例的權值, .這表明, 在加權的訓練數據集上的分類錯誤率是被 誤分類樣本的權值之和,由此可以看出數據權值分佈 與基本分類器 的分類錯誤率的關係。
(c)計算基本分類器 的係數 表示 在最終的分類器中的重要性。由式子(2.3)可知,當 時, ,並且 伴隨着 的減小而增大,所以分類誤差率越小的基本分類器在最終分類器中的作用越大。
(d)更新訓練數據的權值分佈,爲下一輪作準備。式子(2.5)可以寫成:
由此可知,被基本分類器 誤分類樣本的權值得以擴大,而被正確分類樣本的權值卻得以縮小。二者比較,誤分類樣本的權值被放大 倍.因此,誤分類樣本在下一輪學習中起更大的作用。不改變所給的訓練數據,而不斷改變訓練數據的權值分佈,使得訓練數據在基本分類器的學習中起不同的作用,這是AdaBoost的一個特點。
步驟(3)線性組合 實現了 個基本分類器的加權表決。係數 表示了基本分類器 的重要性,這裏,所有 之和並不爲1. 的符號決定實例 的類, 的絕對值表示分類的確信度,利用基本分類器的線性組合構建最終分類器是AdaBoost的另一特點。
參考例子
注意,權值分佈是在計算錯誤率 時起作用,公式(2.2)中。