---
# System prepended metadata

title: Ensemble
tags: [李宏毅]

---

Ensemble
===

###### tags: `李宏毅`

## 教材
* [pdf](https://drive.google.com/file/d/1epR5B2AC-3ptS_EWGZHXW43eptGIjZZe/view?usp=sharing)
* [youtube](https://www.youtube.com/watch?v=tH9FH1DH5n0&ab_channel=Hung-yiLee)

## Bagging
把 N 個 Training Data 取樣 N' 成多個 Set，然後針對這四個 Set 分別訓練一個模型。
![](https://i.imgur.com/lQ7YLKW.png)


最後再取平均或 Voting，做 Bagging 是為了減緩 Overfitting。
![](https://i.imgur.com/l6bdd50.png)


Decision Tree 很容易 Overfitting，因為它一定可以 Fit 出任何一種 Training Data，所以 Random Forest 就是 Bagging of Decision Tree。
![](https://i.imgur.com/fC4GCE9.png)


## Boosting
跟 Bagging 用在很複雜的 Model 相反，Boosting 是用在 Weak Classifier。Boosting 保證只要能產生 Error Rate 小於 50% 的 Classifier，在 Boosting 後就可以拿到 0% Error Rate。
![](https://i.imgur.com/wN8Op1X.png)


取得不同的 Classifier 的方式是使用不同 Training Data Set 訓練，可以 Re-sampling 或 Re-weighting。
![](https://i.imgur.com/gt4FwQu.png)


## Adaboost
基於 f1 訓練 f2。
![](https://i.imgur.com/ra131ej.png)


把 f1 訓練錯的資料的 Weight 放大，所以一開始 Error Rate 會增加。
![](https://i.imgur.com/Owrx72r.png)


實際上做 Re-weighting 的方法，就是在 f1 答錯時，就把那筆資料的權重乘以 d1，反之除以 d1。
![](https://i.imgur.com/lLTLuSw.png)


總之最後要讓 Error Rate 等於 0.5，推導如下。
![](https://i.imgur.com/7PsGeYV.png)

![](https://i.imgur.com/L1F8Kxn.png)


## Adaboost 數學推導
證明 Weak Classifier 越多，會讓 Error Rate 越低。
![](https://i.imgur.com/6Vj3UpI.png)

![](https://i.imgur.com/qdeKQFV.png)

![](https://i.imgur.com/tur76I1.png)

Adaboost 有個神奇的現象，Training Data 的 Error Rate 可能很早就會變 0，但是 Testing Data 的 Error Rate 卻可以持續下降。這是因為在算 H(x) 會希望 $α_tf_t(x)$ 越大越好，所以雖然 Training Data 的 Error Rate 一樣，但是 Testing Data 的卻可以持續下降。
![](https://i.imgur.com/CaAUdc3.png)


Adaboost 之所以可以讓 Testing Data 的 Error Rate 持續下降是因為 Adaboost 的 $\hat{y}^ng(x^n)$ 相乘像是 Logistic Regression 一樣越來越低，而不是跟 ReLU 一樣到了正值之後都一樣。
![](https://i.imgur.com/xmI3X9W.png)


## Gradient Boosting
Loss Function 如下。
![](https://i.imgur.com/jg6UABG.png)


把 L(g) 對 g 做偏微分。
![](https://i.imgur.com/2iWmNIh.png)

![](https://i.imgur.com/5xdzAtZ.png)

![](https://i.imgur.com/a0vfS91.png)


## Voting
除了用來訓練各個 Classifier 的 Training Data 外，還要有個 Training Data 用來訓練 Final Classifier。
![](https://i.imgur.com/tAuOXgc.png)
