AdaBoost

機器學習中一種讓多個弱分類器投票的演算法
Ensemble 手法的一種

Ensemble

「三個臭皮匠勝過一個諸葛亮」

使用多個弱分類器合成一個強分類器

  • 每個分類器要不一樣
  • 錯誤率要 < 0.5

Ensemble 做法

  • Bagging: 隨機取樣做訓練,再使用 majority vote
  • Boosting: 放大每輪做錯的測資作為新一輪的訓練

Bagging

Bootstrap aggregating

隨機取樣作為訓練資料,用於搭配複雜的演算法 (如 decision tree) 降低 overfit 的情況。多次隨機取樣訓練出多個模型,最後用 majority vote。

單個分類器可能會 overfit 取樣結果,但 bagging 將所有的分類器總和取平均,相對更於平滑

Boosting

將多個弱分類器合成一個強分類器

 

分類器本身只需比隨機還要好一點就行

 

bagging 和 boosting 有點相反,前者是模型過於複雜,要降低 overfit,後者是模型過於簡單,要提升正確率。

Bagging vs Boosting

Bagging Boosting
適用模型 複雜
(decision tree)
簡單
(decision tree stump)
處理問題 overfit underfit
取樣方式 隨機 權重
合成方式 majority vote 權重

AdaBoost

Adaptive Boosting

Why & How

Binary Classification

令 \(h\) 是一個二元分類器,輸出是 \(-1\) 或 \(+1\)

$$ h: \{-1, +1\} $$

若 \(h\) 是弱分類器,我們希望集合多個不同的 \(h\) 形成一個強分類器

$$0$$

$$1$$

$$0.5$$

weak

strong

error

令 \(H\) 是合成的強分類器

$$ H(x) = sign(h^1(x) + h^2(x) + h^3(x)) $$

\(x\) 是 samples

rate

Input space

\(h^1\) wrong

\(h^2\) wrong

\(h^3\) wrong

投票後最差的可能情形是?

Input space

\(h^1\) wrong

\(h^2\) wrong

\(h^3\) wrong

Idea

DATA \(\rightarrow h^1\)

\(h^1\) 在原始資料中具有最小 error rate

 

DATA 在 \(h^1\) 錯誤經過加權 \(\rightarrow h^2\)

\(h^2\) 在加權資料中具有最小 error rate

 

DATA 在 \(h^2\) 錯誤經過加權 \(\rightarrow h^3\)

\(h^3\) 在加權資料中具有最小 error rate

Questions

  • Example of \(h^1\), \(h^2\), \(h^3\)?
  • How to weight data?
  • \(H(x) = sign(h^1(x) + h^2(x) + h^3(x))\) ?
    有更好的做法嗎?

\(h\) 是哪種演算法?

可以是任何演算法,NN、decision tree

最簡單的例子:一層的 decision tree: decision tree stump

\(h^1\) 是哪一個 \(h\)?

\(h^1\) 是在所有 \(h\) 中作用在原始資料上有最小 error rate

\(h^1\) 是哪一個 \(h\)?

令 error rate \(\epsilon\) 定義為

$$ \epsilon = \sum_{\text{wrong}} \frac{1}{N}$$

\(N\) 是 sample 的數量

\(\epsilon\) 就是錯誤資料量 \(\times \frac{1}{N}\)

加權?

\(h\) 在加權資料中具有最小 error rate

$$ w^{t=1}_{i=1} $$

$$ w^{1}_{i=2} $$

$$ w^{1}_{i=3} $$

更正 \(\epsilon\) 定義為加權型式

$$ \epsilon = \sum_{\text{wrong}} w_i $$

$$ w^1_i = \frac{1}{N} $$

$$ \sum{w_i} = 1 $$

其中 \(w^1\) 代表第一輪資料的權重

Questions

  • Example of \(h^1\), \(h^2\), \(h^3\)?​
  • How to weight data?
  • \(H(x) = sign(h^1(x) + h^2(x) + h^3(x))\) ?
    有更好的做法嗎?

$$ H(x) = ? $$

$$ H(x) = sign( \qquad h^1(x) + \qquad h^2(x) + \qquad h^3(x) + \cdots) $$

$$\alpha^1$$

$$\alpha^2$$

$$\alpha^3$$

AdaBoost 演算法

令 \(w^1_i = \frac{1}{N} \)

挑出 \(h^t\) 使得 \(\epsilon^t\) 最小

計算 \(w^{t+1}\)

計算 \(\alpha^{t}\)

變數整理

error rate \( \epsilon \)

$$ \epsilon = \sum_{\text{wrong}} w_i $$

\(N\): sample 數量

\(w^t_i\): 第 t 輪第 i 個資料的權重

\(h^t\): 第 t 輪挑出來的分類器,它使得 \(\epsilon^t\) 最小

\(\alpha^t \): 給第 t 輪挑出的分類器 \(h^t\) 的權重

\(H\): 將每輪的弱分類器合併後得到的強分類器

數學公式

$$\alpha^t = \frac{1}{2}ln\frac{1-\epsilon^t}{\epsilon^t}$$

 

$$ w^{t+1}_i = \frac{w^t_i}{Z} \times \begin{cases} \sqrt{\frac{\epsilon^t}{1-\epsilon^t}} \quad \text{correct} \\ \sqrt{\frac{1-\epsilon^t}{\epsilon^t}} \quad \text{incorrect} \end{cases}$$

 

\(Z\): normalize 總和為\(1\)

推導......略!

性質

$$\sum_{\text{correct}}{w^{t+1}} = \frac{1}{2}$$

 

$$\sum_{\text{wrong}}{w^{t+1}} = \frac{1}{2}$$

$$w^{t+1}_{i} = \begin{cases}\frac{w^t}{2}\frac{1}{1-\epsilon} \quad \text{correct} \\ \frac{w^t}{2}\frac{1}{\epsilon} \qquad \text{wrong} \end{cases}$$

答對的 weight 經過總和縮放會等於 \(\frac{1}{2}\)

答錯的 weight 也是

總結

  • AdaBoost 是一種 ensemble 方式,合併多個弱模型得到一個強模型
  • 實驗結果來看,AdaBoost 不太會有 overfit 的情況,原因沒有定論

References

AdaBoost

By doraeric

AdaBoost

  • 50