기계학습

1. 앙상블(Ensemble) 기법과 배깅(Bagging), 부스팅(Boosting), 스태킹(Stacking)

H_erb Salt 2022. 4. 15. 13:58

안녕하세요, 허브솔트에요.

저희 데이터맛집의 허브솔트 첫 글 주제로 앙상블이 당첨됐네요...!

 

 

요새 캐글의 상위권 메달을 휩쓸고 있는 대세 알고리즘이 앙상블 기법을 사용한 알고리즘의 한 종류인 XGBoost라죠? 머신러닝의 성능을 극대화하고 보완하는 앙상블은 그만큼 중요하고 의미가 있습니다. XGBoost도 추후에 다뤄보도록 할게요. 우선 큰 갈래를 잡고 시리즈로 연재를 해보도록 하겠습니다.

 

 

그럼 달려봅시다 빠샹

 

 

 

 

 

가. 앙상블(Ensemble)이란?

- 백지장도 맞들면 낫다. 머신러닝 또한! -

 

 

말 그대로 앙상블입니다. 머신러닝을 위한 다양한 학습 알고리즘들을 결합하여 학습시키는 것으로, 예측력의 보완은 물론, 각각의 알고리즘을 single로 사용할 경우 나타나는 단점들을 보완하죠.

 

 

위키피디아에서는 앙상블을 이렇게 정리합니다.

 

Ensemble methods use multiple learning algorithms to obtain better predictive performance than could be obtained from any of the constituent learning algorithms alone. 

- 앙상블 기법은 여러 학습 알고리즘을 사용하여 구성 학습 알고리즘만으로 얻을 수있는 것보다 더 나은 예측 성능을 얻습니다 -

 

Evaluating the prediction of an ensemble typically requires more computation than evaluating the prediction of a single model.

- 앙상블기법의 예측력을 평가하기 위해서는 일반적으로 단일 모델의 예측을 평가하는 것보다 더 많은 계산이 필요합니다 -

 

즉, 더 많은 연산능력을 활용하여 더 좋은 예측력을 가지게 되는 것입니다. (gpu, cpu, ram... 노동착취+열정페이)

 

 

앙상블 기법엔 배깅(Bagging) / 부스팅(Boosting) / 스태킹(Stacking) 등이 있습니다.

 

그럼 각각에 대해 좀 더 알아볼께요.

 

 

 

 

 

나. 배깅(Bagging)

- Bootstrap aggreagting: 부트스트랩을 집계한다. 병렬로, 복원추출로!

 

배깅(Bagging)은 부트스트랩(Bootstrap)을 집계(Aggregating) 하는 것

 

 

우선 부트스트랩(bootstrap)에 대해 알아야 합니다.

 

부트스트랩(bootstrap)은 통계학에서 사용하는 용어로, random sampling을 적용하는 방법을 일컫는 말입니다. 예를 들어, 한 식자재마트에 들어오는 상추의 신선도를 알고 싶은 경우, 마트로 입고되는 모든 상추 중 임의로 100개를 뽑아 그 상추의 신선도 평균을 구하는게 되겠습니다.

 

이게 무슨 의미가 있을까요? 바로 raw data의 분포를 추정할 때 사용할 수 있습니다. 예를 들어, 측정된 데이터 중에서 중복을 허용한 복원 추출로 n개를 뽑고, 뽑은 n개의 평균을 구하는 것을 m번 반복하여 모으게 되면 평균에 대한 분포를 구할 수 있게 되고, 이로부터 sample mean에 대한 신뢰 구간을 추정할 수 있게 되는 겁니다.

 

이러한 부트스트랩은, 머신러닝에서도 적용될 수 있는데요. 바로 random sampling을 통해 training data를 늘릴 수 있습니다. 

 

즉, 배깅(Bagging)은 부트스트랩(bootstrap)을 집계(Aggregating)하여 학습 데이터가 충분하지 않더라도 충분한 학습효과를 주어 높은 bias의 underfitting 문제나, 높은 variance로 인한 overfitting 문제를 해결하는데 도움을 줍니다.

 

 

 

회색으로 표시된 각각의 model들을 취합하여 overfit을 줄이는 예. (Wikipedia/Bootstrap_aggregating)

 

일반적으로, categorical data의 경우 투표로 집계되며, continuous data의 경우 평균으로 집계된다고 합니다.

 

 

대표적인 Bagging 알고리즘으로 그 유명한 랜덤 포레스트(Random Forest)가 있습니다..! (어디에 놔도 반이상은 간다는 그 알고리즘이요)

 

랜덤포레스트에 대해서는 추후 다뤄보도록 하겠습니다.

 

 

 

 

 

다. 부스팅(Boosting)

- 순차적으로, 복원추출로 가중치를 준다! -

부스팅(Boosting)의 학습 방향. 배깅과는 다르게 순차적으로 진행된다.

부스팅(Boosting)의 경우도 Bagging과 크게 다르지 않으며 거의 동일한 매커니즘을 갖고 있습니다.

 

그런데 배깅과는 다른점이, 순차적으로 학습이 진행되는 것입니다. 앞선 bagging의 경우 각각의 분류기들이 학습시 상호영향을 주지 않은 상황에서(독립적) 학습이 끝난 다음 결과를 종합하는 기법이라면,

 

boosting은 이전 분류기의 학습 결과를 토대로 다음 분류기의 학습 데이터의 샘플 가중치를 조정해 학습을 진행하는 방법입니다.

 

 

즉, 먼저 생성된 모델을 꾸준히 개선해 나가는 방향으로 학습이 진행되는 것입니다.

 

이러한 부스팅기법은 일반적으로 오답에 대해 높은 가중치를 부여하므로 정확도가 높게 나타납니다. 하지만 그렇기 때문에 outlier에 취약할 수 있습니다.

 

 

Boosting 기법을 활용한 대표적인 알고리즘은 위에서 언급한 XGBoost와 AdaBoost, GradientBoost 등 다양한 모델이 존재하고 있습니다.

 

 

 

 

 

라. 스태킹(Stacking)

- 크로스 벨리데이션(Cross Validation) 기반으로 서로 상이한 모델들을 조합한다! -

 

기본적인 Stacking 방법. 개별적인 모델이 예측한 데이터를 다시 traning data set으로 활용하여 학습.

 

스태킹(Stacking)은 위의 다른 두 기법과는 조금은 다른 접근법을 가지고 있습니다.

기본적으로, 스태킹(Stacking)은 개별 모델이 예측한 데이터를 다시 meta data set으로 사용해서 학습한다는 컨셉입니다.

 

그러므로 Stacking을 위해서는 2가지 개념의 모델이 필요합니다. 개별 모델들(그림에서의 Base Learner)과 최종 모델(그림에서의 Meta Learner)이죠.

 

 

그런데, 위의 기본적인 Stacking 방법의 경우 Base Learner들이 동일한 데이터 원본 데이터를 가지고 그대로 학습을 진행했기 때문에 overfitting 문제가 발생하게 됩니다.

 

 

Bagging과 Boosting에서는 bootstrap(데이터를 random sampling) 과정을 통해 overfitting을 효과적으로 방지한 것과는 대조적인 모습입니다.

 

 

 

따라서 Stacking에서도 비슷한 방식을 도입합니다. 크로스 벨리데이션(Cross Validation)으로 데이터를 쪼개는 것입니다.

 

 

크로스 벨리데이션(Cross Validation), 이하 CV

 

크로스 벨리데이션(CV)이란, data set을 k번 쪼개서 반복적으로 쪼갠 data를 train과 test에 이용하여(k-fold cross validation) 교차 검증을 하는 것입니다. (보통 10-fold cross validation이 안정적이라고 합니다)

 

 

따라서, CV 기반의 Stacking 과정은 아래와 같이 진행됩니다.

 

 

1. Base Learner들은 원본 데이터를 각 fold별로 쪼개어 train set을 이용하여 학습합니다.

(예를 들어, 4-fold CV의 경우 한 fold 마다 2개의 train set, 1개의 validation set, 1개의 test set이 생성되죠.)

 

2. Base Learner들은 각 fold 마다 학습한 모델을 validation set에서 계산한 결과를 모으고, test set을 이용한 예측값은 평균을 내어 meta 모델에 사용하는 하나의 test set으로 만듭니다.

(만약 3개의 Base Learner를 사용한다면, Base Learner들은 각각 3개의 validation set와 1개의 test set이 존재합니다.)

 

3. 결과적으로, 모든 Base Learner의 validation set와 test set을 모아 meta train set와 meta test 셋으로 활용하여 학습한 뒤, 최종 모델을 생성합니다.

(4-fold CV의 경우 총 9개의 validation set를 meta train set로, 3개의 test set를 meta test set로 사용하죠!)

 

 

 

이렇듯 CV 기반으로 Stacking을 적용함으로써 overfitting은 피하며 meta 모델은 '특정 형태의 샘플에서 어떤 종류의 단일 모델이 어떤 결과를 가지는지' 학습할 수 있게 됩니다. 결과적으로 더욱 완성도 있는 모델을 완성할 수 있게 되는 것이죠!

 

Stacking의 단일 모델은 어떠한 모델을 사용해도 상관없으며, 흡사 neural network처럼 2단이상의 deep한 stacking도 충분히 가능합니다.(그만큼 연상량이 많아지긴 하지만요)

 

 

 

 

이상으로 앙상블의 기본적인 개념들과 적용방식에 대해 알아보았습니다. 다음 시간에는 각 기법의 대표적인 알고리즘들에 대해 공부하는 시간을 가져볼게요!

 

 

이상 허브솔트 였어요!(짝짝짝)