一文搞懂:Adaboost及手推演算法案例

忽逢桃林發表於2020-06-21

boosting

Boosting 演算法的特點在於:將表現一般的弱分類器通過組合變成更好的模型。代表自然就是我們的隨即森林了。

GBDT和Adaboost是boost演算法中比較常見的兩種,這裡主要講解Adaboost。

Adaboost

Adaboost演算法的核心就是兩個權重。對於資料有一個權重,權重大的資料計算的損失就大;然後對於每一個弱分類器有一個權重,這個權重就是每一個弱分類器最終投票的比重。

【先給出Adaboost關鍵的公式】
\(\alpha_1=\frac{1}{2}ln(\frac{1-\epsilon_1}{\epsilon_1})\) 分類器的投票權重
\(W_i=W_ie^{-\alpha_i y_i \hat{h}(x_i)}\) 更新樣本的權重

【隨即森林中最終投票每一個弱分類器的比重相同】

大概流程就是,現在有一個資料集,然後每個資料的比重都相同,然後訓練了好幾個不同的弱分類器。

  1. 挑選錯誤率最低的弱分類器,然後通過【某種演算法】得到這個弱分類器最終投票的比重,然後通過【某種演算法】更新每一個資料的比重;
  2. 因為每一個資料的比重更新了,所以再選擇一個錯誤率最低的弱分類器,然後通過【某種演算法】得到這個弱分類器最終投票的比重,然後通過【某種演算法】更新每一個資料的比重;
  3. 重複這個過程。

演算法的流程:


這裡給一個具體計算的例子:
假設這裡有10個資料:

加號和減號分別代表不同的類別。然後每個類別有5個樣本。

下面會給出3個弱分類器:

這三個分類器分別是\(h_1(x),h_2(x),h_3(x)\)
圖中畫圈的資料就是分類錯誤的資料。可以發現每個弱分類器都分錯了3個。下面開始Adaboost的演算法。

先計算三個弱分類器的錯誤率,因為一開始每個樣本的權重都是0.1,每個分類器又都錯了3個樣本,所以錯誤率都是0.3。這裡就隨機選取第一個分類器作為錯誤率最低的那個好了。
我們這裡通過第一個【某種演算法】計算第一個弱分類器在最終的投票權重:
\(\alpha_1=\frac{1}{2}ln(\frac{1-\epsilon_1}{\epsilon_1})=0.5*ln(\frac{0.7}{0.3})=0.4236\)

然後通過這個\(\alpha_1=0.4236\)來更新每一個樣本的權重。這也就是上面提到的第二個【某種演算法】:
\(W(i)=W(i)*e^{-\alpha y_i \hat {h}(x_i)}\)

這啥意思的,現在假設第一個樣本+1,這個樣本的權重是0.1(更新前),然後這個樣本在第一個分類器中是非類正確的,所以\(y_i \hat{h}(x_i)=1\),所以這個樣本更新後的權重就是\(0.1e^{-0.4236}=0.0655\)

當然,對於+3這個樣本,第一個分類器就分類錯誤,所以\(y_i \hat{h}(x_i)=-1\),所以呢這個樣本更新後的權重就是:\(0.1e^{0.4236}=0.1527\)

下面經過第一個分類器之後的樣本的權重:

然後再計算每一個分類器的基於更新之後樣本權重的錯誤率:

這一次選的是第二個分類器,然後計算它的\(\alpha_2\),然後再更新每一個樣本的權重值:

然後是再尋找錯誤率最低的分類器:

到這一步的時候,我們已經有了\(\alpha_1,\alpha_2,\alpha_3\),所以我們的adaboost已經得到了所有分類器的投票權重,所以最終的模型投票公式就是:


喜歡的話請關注我們的微信公眾號~【你好世界煉丹師】。

  • 公眾號主要講統計學,資料科學,機器學習,深度學習,以及一些參加Kaggle競賽的經驗。
  • 公眾號內容建議作為課後的一些相關知識的補充,飯後甜點。
  • 此外,為了不過多打擾,公眾號每週推送一次,每次4~6篇精選文章。

微信搜尋公眾號:你好世界煉丹師。期待您的關注。

相關文章