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