본문 바로가기

Machine Learning

Ensemble의 기법

 앙상블에 대해 공부하는 분이라면 이미 Logistic Regression Tree와 Random Forest Regression의 차이에 대해 알 것이라 생각합니다. Random Forest Regression은 여러개의 Logistic Regression Tree들의 예측값들을 평균내서 예측값을 추측합니다. 이 모델의 기반이 되는 생각은 "똑똑한 한 명의 천재보단 멍청한 여러명의 집단이 낫다."라고 요약할 수 있겠네요. 앙상블도 마찬가지 입니다. 앙상블이란 머신 러닝에서 사용되는 모델의 성능을 올리기 위한 기법 중 하나로 다양한 기법들이 존재합니다.

 앙상블에는 크게 Voting, Bagging, Boosting, Stacking. 총 4가지가 있습니다. 이 글에선 앙상블의 기법과 각 기법들의 동작 방식을 쉽게 설명해보려고 합니다.

 

0. Bias? Varience?

 앙상블의 기법에 대한 이야기를 시작하기 전에 알아둬야 할 개념이 있습니다. 이미 알고 계신 개념일수도 있겠지만, Bias와 Variance입니다. Bias는 편향, Variance는 분산이란 뜻의 단어입니다. 지금은 이해하기 힘드실 수 있지만 항상 우리의 목표는 Low Bias와 Low Variance를 이루는 것입니다. 하지만 둘의 관계는 하나를 이루면 하나는 약해지는 trade-off 관계에 있기에 둘을 잘 조정하는게 중요하죠. 아무튼, Bias와 Variance에 대해 설명하자면 Bias는 정답에 가까워 지는 정도, Variance는 예측값들이 흩어지는정도로 생각하시면 됩니다.

 Low Variance, High Bias한 모델은 Variance가 낮으므로 일정하게 답을 낼 수는 있지만 정답에선 조금 멀어진 답을 내겠죠. 마치 항상 7점을 맞추는 양궁 선수를 생각하시면 됩니다. 반대로 High Variance, Low Bias한 모델은 Bias가 낮으므로 정답에 가까운 답을 낼 수 있지만 Variance가 높으므로 중구난방한 답을 내기 쉽습니다. 이것은 10점을 맞추기도 하지만 컨디션에 따라 5점도 맞추는 양궁 선수를 생각하시면 됩니다. 더 나아가서 모델을 overfitting 한다면 Bias는 낮아지겠지만 새로운 문제에 부딪혔을 때 Variance가 높아지게 될 것이고(Low Bias, High Variance), underfitting한다면 Variance는 낮아지겠지만 기초적인 문제도 맞추지 못할 것 입니다(High Bias, Low Variance).

Bias vs Variance Trade-off

 

1. Voting

 Voting은 아래서 설명할 Bagging과 비슷하지만 다른 점은 서로 다른 모델들을 결합할 수 있고, Bootstrapping 과정이 없다는 것입니다. Voting은 서로 다른 모델들을 데이터 셋으로 학습시키고 각 모델들의 예측값을 평균내거나 최빈값을 계산하는 방식으로 최종 예측값을 계산합니다. 이런 Voting의 종류를 Soft Voting과 Hard Voting이라고 하는데 이는 아래의 Bagging에서 설명하도록 하겠습니다. Voting의 동작 방식은 아래 그림과 같습니다.

Voting

 

2. Bagging

 Bagging의 개념은 이해하기 쉽습니다. 기본적인 동작 방식은 Random Forest Regression과 동일하기 때문입니다. Bagging은 서로 독립적인 여러개의 모델들을 생성하고 동시에 훈련시켜 예측값을 추정하고, 이것이 기존의 하나의 모델을 사용했을 때보다 강력해 지는 것을 목표로 합니다. 대표적으로 Bagging을 사용하는 알고리즘은 Random Forrest Regression 모델이 있습니다.

 Bagging에 대해 알기 위해선 Bootstrapping이란 개념을 알아야 합니다. Bootstrapping이란 resampling(데어터셋을 새롭게 분류하는 행위)로서 초기 데이터셋에서 일정한 개수만큼 랜덤하게 뽑아 N개의 새로운 데이터셋을 만드는 것입니다. 통계학적으로 볼 때 이런 Bootstrapping이 우리가 원하는 효과를 내주기 위해선 만족해야 할 2가지 조건이 있습니다. 하나는 기초 데이터 셋이 충분히 커야하고, 나머지 하나는 기초 데이터셋이 새로 만들어진 샘플 데이터셋 하나의 크기보다 충분히 커야 합니다. 이 두가지 조건을 만족해야 Bootstrapping을 통해 만들어진 새로운 데이터셋이 대표성과 독립성을 가진다고 할 수 있습니다.

Bagging

 이런 행위를 하는 이유는 독립적으로 여러개의 모델을 학습시켜야 하는 Bagging에서 동일한 기존의 데이터셋을 가지고 모든 모델을 훈련시킬 수 없기 때문입니다. 우리가 모델을 사용할 때 이 모델은 특정한 입력값을 가지고 출력값을 예측합니다. 만약 같은 데이터셋(Bootstrapping을 거치지 않은 초기 데이터셋)을 통해 훈련한 모델들이라면 같은 모델이 되는 것이죠.

 앞서서 말했듯이 Bagging의 개념은 간단합니다. 여러개의 독립적인 모델을 훈련시켜 각 모델들의 예측값의 평균을 내는 것입니다. 이런 행동을 통해 Variance를 낮출 수 있습니다. 물론 이것은 앞서 말했던 Bootstrapping의 2가지 조건을 만족했을 때 효과적으로 동작합니다. 이렇게 여러 개의 모델들에서 나온 값들을 하나의 최종적인 예측값으로 만드는 데에는 Voting을 이용합니다. 인공지능 Competition의 문제 유형은 크게 2가지로 나눌 수 있습니다. 값이 연속적인 숫자로 나오는 경우(회귀, regression), 특정 종류로 나누는 경우(분류, classification)입니다. Bagging에서는 독립적인 모델들의 예측값들을 평균낸다고 했는데 사실은 그 중에도 두가지 경우가 있습니다. 회귀 문제는 말 그대로 각 모델들의 예측값들의 평균을 냅니다. 분류 문제같은 경우엔 또 2가지 경우로 나누는데 Hard Voting과 Soft Voting입니다. Hard Voting는 득표수가 더 많은 답안을 제출하고 Soft Voting은 모든 모델에서 주는 각 답안의 확률의 평균을 내고 그 중 가장 높은 확률을 답안으로 제출합니다.

 

3. Boosting

 Boosting은 도입부에서 말했던 "똑똑한 한 명의 천재보단 멍청한 여러명의 집단이 낫다."는 말과는 조금 다른 앙상블 기법입니다. 모델을 순차적으로 반복해서 학습시키는데 이 과정은 바로 전 단계의 모델에 의존합니다. 그리고 이런 과정을 통해 기존의 하나의 모델을 사용하는 것보다 Bias를 낮추는 것에 목표를 둡니다.

 Boosting은 어려운 문제를 푸는 것에 집중합니다. 여러 개의 모델을 마치 링크드 리스트처럼 배열하고 전 모델에서 학습했을 때 정답과 거리가 멀었던 문제들에 대해 높은 가중치를 부여하고 정답이었던 문제들에 대해선 낮은 가중치를 부여해 새로운 모델을 다시 학습시킵니다. 이런 방식을 통해 학습을 시키므로써 Bias를 낮출 수 있지만 Overfitting 되기 쉽다는 약점이 있습니다. 이런 Boosting에도 여러가지 종류가 있는데 가장 인기있는 것이 AdaBoost(Adaptive Boosting)와 Gradient Boosting이 있습니다.

 AdaBoost는 앞서 말했던 Boosting의 과정과 거의 유사합니다.

 1. 모든 데이터셋을 이용해 하나의 모델을 훈련시킵니다.

 2. 그 모델을 이용해 나온 결과 값들 중 예측이 잘못된 문제들의 가중치를 높입니다.

 3. 위 과정을 반복합니다.

Adaptive Boosting

 Gradient Boosting은 AdaBoost보다 조금 더 복잡합니다. Gradient Boosting은 AdaBoost처럼 매 학습단계마다 가중치를 새로 업데이트 해주는 것이 아니라 전 단계에서 잔여 오차(Residual Error)에 대해서 새로운 모델을 학습시킵니다.

Gradient Boosting

 

4. Stacking

 Stacking은 앞서 말했던 Bagging, Boosting과 2가지 측면에서 다릅니다. 먼저 Stacking은 서로 다른 모델들에 대해서 적용 가능하고(Bagging과 Boosting은 같은 모델에서만 사용 가능한 반면에), Meta-Model을 이용해 모델들을 결합합니다. 따라서 Stacking을 사용하기 위해선 우리는 2가지를 결정해야 합니다. 우리가 훈련시킬 L개의 모델과 그것들을 결합시킬 Meta-Model입니다.

 예를 들어, 분류 문제에서 우리는 KNN, Logistic Regression, SVM을 모델로 결정했고 Neural Network를 메타 모델로 선정했습니다. 그렇다면 Neural Network는 3개의 모델의 예측값을 입력으로 사용하고 그를 이용해 최종 예측값을 출력합니다. 과정은 다음과 같습니다.

 1. 데이터셋을 2개로 나눕니다.

 2. L개의 모델들을 선정하고 1.에서 나누었던 데이터 중 첫 번째 데이터셋을 이용해 훈련시킵니다.

 3. L개의 모델들에서 두 번째 데이터셋을 이용해 예측값을 출력합니다.

 4. 메타 모델을 3.에서 나온 예측값을 이용해 훈련시킵니다.

Stacking

 

 

  이 글은 towardsdatascience.com에서 Joseph Rocca가 작성한 Ensemble methods: bagging, boosting and stacking을 참고했습니다. 이 글에선 각 기법의 알고리즘적인 동작 방식과 세부적인 과정을 정리하진 않았습니다. 혹시 추가적인 학습을 원하시는 분은 아래의 글을 참고하시길 바랍니다. 감사합니다.

https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205