Bagging
04_3 : Ensemble Learning : Bagging
앙상블 방법의 핵심은 Diversity (다양성)을 확보하는 것이다. Bagging 방법은 Implicit diversity 관점에서 Data의 다양성을 확보하려는 방법이다.
우리에게 주어진 Dataset은 하나의 큰 data 집합이다. 이 Dataset을 여러 방법으로 조절하여 다양성을 늘려보자.
K-fold data split
K-fold 방법은 가장 처음 시도된 방법론이다. 딥러닝에서 Cross validation과 거의 동일한 메커니즘으로 동작한다.우선 전체 Dataset을 K개의 subset으로 분할한다.
모든 모델의 학습이 완료되면 aggregation function $\delta(\cdot )$을 사용하여 결과를 구한다.
$$ \hat{y} = \delta \big( f_1(x), f_2(x), \cdots, f_k(x)\big) $$
서로 다른 train dataset을 사용하였으니, $f_1 \neq f_2 \neq \cdots \neq f_k$ 이다. 하지만 개별 model들이 완전히 독립적이지 않다는 문제점이 있다. 왜냐하면, 항상 임의의 $f_i$와 $f_j$는 $k-2$개의 fold를 공유하기 때문이다. 또한 데이터를 subset으로 나누는데 한계가 있다. 그렇기 때문에 K-fold방법으로 생성가능한 train dataset의 개수에도 한계가 있다.
K-fold data split은 위와 같은 단점 때문에 요즘에는 잘 쓰이지 않는 방법이다.
Bootstrap Aggregating (Bagging)
- Data Sampling
모든 원소는 한번 이상 Sampling될 가능성이 있고, 동시에 단 한번도 sampling이 되지 않을 가능성이 있다. 반복적으로 sampling하는 과정은 Original data의 분포를 왜곡하는 과정이다. Original data의 생성함수가 $y=f(x)+\epsilon$일 때 $\epsilon$에 종속적이라는 위험을 Original data를 random sampling을 통해 종속적이지 않게, 위험을 방지할 수 있다.
특정 객체가 단 한번도 선택되지 않을 가능성은 아래와 같다.
$$p=\bigg(1-\frac{1}{N}\bigg)^N$$
확률 $p$에 극한을 취하면, $e^x = \lim_{n\rightarrow \infty} (1+\frac{x}{n})^n$ 임을 이용해 아래의 값이 나온다.
$$\lim_{N\rightarrow \infty} \bigg(1-\frac{1}{N}\bigg)^N = e^{-1} = 0.368$$
이 말은 $N$이 일정수준 이상으로 크면, data 중 $2/3$은 Bootstrap에 1회이상 sampling이 되고, $1/3$은 0회 sampling된다는 뜻이다. 이렇게 sampling되지 않은 data들을 Out Of Bag(OOB)라고 부른다.
일반적으로 Training을 할 때 data 중 70%는 Training data로, 30%는 Validation(Test) data로 사용을 한다. Bagging방법을 사용하는 경우, 따로 data를 분할하지 않고, 각 Bootstrap마다 sampling 되지 않은 OOB data를 Validation data로 사용한다. 이를 통해 다른 Validation 방법보다 높은 Generalization이 가능하다.
때문에 data분포의 변화에 민감하게 반응하는 DNN, SVM, DT와 같은 Low Bias, High Variance의 Complexity가 높은 모델에 적용했을 때 Variance를 낮춰주어 성능 향상을 기대할 수 있다.
- Result Aggregating
Sampling된 Bootstrap들을 사용하여 각 model들의 학습을 완료한 후, 각 모델의 예측 결과를 취합하여 결과를 도출해야 한다. 그 방법으로 여러가지가 있는데, 한번 살펴보자.
10개의 Bootstrap이 있고, 각 Bootstrap에 따라 학습한 10개의 Binary Classification model이 있다고 생각해보자. 각 모델의 결과는 아래와 같다.
1. Majority voting
$$\hat{y}_{Ensemble} = arg\;\;\max_i \bigg(\sum_{j=1}^n \delta(\hat{y}_j = i),\;\;\;i\in\{0,1\}\bigg)$$
각 model이 예측한 Predicted class label만을 사용하여 그중 가장 많은 Vote를 받은 label을 선택한다. 위의 예시에서,
$$\sum_{j=1}^n \delta(\hat{y}_j = 0) = 4,\;\;\;\;\sum_{j=1}^n \delta(\hat{y}_j = 1) = 6$$
으로 label을 1로 예측한 모델이 더 많다. 이 경우 앙상블 모델의 예측값은 $\hat{y}_{Ensemble} = 1$ 이다.
2. Weighted voting (Weight = OOB accuracy of individual model)
다음으로는 가중치를 사용하는 방법들을 살펴보자.
$$\hat{y}_{Ensemble} = arg\;\;\max_i \bigg(\frac{\sum_{j=1}^n (OOBAcc_j)\cdot \delta(\hat{y}_j = i)}{\sum_{j=1}^n (OOBAcc_j)},\;\;\;i\in\{0,1\}\bigg)$$
각 model이 예측한 Predicted class label과 대응하는 OOB Accuracy를 곱하여 그 비율을 합산한다. 위의 예시에서,
$$\frac{\sum_{j=1}^n (OOBAcc_j)\cdot \delta(\hat{y}_j = 0)}{\sum_{j=1}^n (OOBAcc_j)} = 0.424,\;\;\;\;\frac{\sum_{j=1}^n (OOBAcc_j)\cdot \delta(\hat{y}_j = 1)}{\sum_{j=1}^n (OOBAcc_j)} = 0.576$$
으로 이 경우 앙상블 모델의 예측값은 $\hat{y}_{Ensemble} = 1$ 이다.
3. Weighted voting (Weight = predicted probability for each class)
이번에는 각 model들이 어느정도로 범주를 예측했는지를 그 weight로 사용해보자.
$$\hat{y}_{Ensemble} = arg\;\;\max_i \bigg(\frac{1}{n} \sum_{j=1}^n P(y=i),\;\;\;i\in\{0,1\}\bigg)$$
각 model이 동일한 예측을 하더라도, 얼마나 강하게 그 범주라고 말하고 있는지 정도가 다르다. 이를 반영하도록 $P(y=i)$를 모두 합산한다. 위의 예시에서,
$$\frac{1}{n} \sum_{j=1}^n P(y=0) = 0.375,\;\;\;\;\frac{1}{n} \sum_{j=1}^n P(y=1) = 0.375$$
으로 이 경우 앙상블 모델의 예측값은 $\hat{y}_{Ensemble} = 1$ 이다.
지금까지 단순한 Aggregation 방법들을 살펴보았다. 이 외에도 수많은 방법들이 존재한다. 하지만 그중 어느 방법이 가장 좋다 라고 말할 수 없고, 그때그때 적절한 Aggregation 방법이 다르다. 일반적으로 Classification model에는 Majority voting을, Regression model에는 평균을 사용한다.
- Stacking
Aggregation 방법 중 유의미하게 더 좋은 성능을 보이는 방법이 있다. 각 model들의 예측값을 입력으로 사용하여 앙상블 모델의 출력값을 만드는 Meta-Learner를 사용하는 Stacking 방법이다.
$$\hat{y}_{Ensemble} = g \big( f_1(x), f_2(x) , \cdots , f_m(x) \big)$$
우리는 Train과정에서 각 $x$에 대한 정답 $y$를 알고있다. 이를 사용하여, 각 모델의 예측결과 $f_i(x)$를 입력으로 받아 $y$를 예측하는 Meta 함수 $g$를 학습시키는 것이다.
Bootstrap Aggregating (Bagging) (Add.)
Bagging 의 pseudo-code는 아래와 같다.
※ 이 글은 고려대학교 산업경영공학과 강필성 교수님의 IME654 강의를 정리하고, 공부한 내용을 추가하여 작성되었습니다.
댓글
댓글 쓰기