여러가지 ensemble learning 방법들

1. background

 

ensemble이란 단일 알고리즘보다 적당히 여러개 알고리즘을 조합해서 성능이 향상되길 기대하는 것

 

모든 데이터셋에 대한 우수한 알고리즘이 존재하는가?

 

데이터셋에 따른 알고리즘의 에러율

 

 

 

위 그림에서 x축은 데이터셋이고 y축은 알고리즘의 상대적인 에러이고 각 line은 알고리즘에 따른 그래프

 

그림을 보면 모든 알고리즘 각각이 모든 데이터셋에 우수하진 않다

 

neural network도 Diabetes라는 데이터에는 에러율이 높다

 

특정 알고리즘이 모든 데이터셋에 대해 항상 열등한가? 우월한가? 그것은 아니다

 

따라서 하나의 알고리즘을 쓰는 것보다 여러 알고리즘을 모두 쓰는 것이 좋은 인사이트를 얻을 수 있다

 

 

2. ensemble learning

 

여러 개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 예측을 도출하고자 하는 기법

 

강력한 하나의 모델을 쓰는 것 대신 보다 약한 여러개의 모델을 조합해서 정확한 예측에 도움을 주는 기법

 

현실에 비유하면 한명의 전문가보다 여러명의 집단 지성으로 문제를 해결하고자 하는 방식이다

 

ensemble learning 도식

 

 

약한 여러개의 분류기 N개를 각각 가중치를 주어 강력한 분류기를 만드는 방식

 

성능을 분산시켜 overfitting을 어느정도 해소함

 

개별 모델의 성능이 잘 안나오면 앙상블로 성능이 향상될 수 있음

 

 

3. bagging

 

bootstrap aggregating의 약자로 bootstrap sampling을 통해 각각의 sample에 모델을 학습시키고 결과를 집계하여 aggregating을 한다

 

각각의 sample에 모두 같은 유형의 알고리즘을 사용함

 

데이터 sampling 시 중복을 허용함

 

overfitting의 방지에 효과적임

 

random forest가 대표적인 bagging알고리즘

 

만약 bootstrap sampling과정에서 중복을 허용하지 않고 sampling을 하면 pasting이라고 부름

 

bagging 알고리즘 도식

 

 

 

decision tree를 적합시키면 random forest알고리즘

 

4. voting

 

bagging과 비슷하게 전개는 되는데 앞의 bagging은 여러개의 데이터 샘플을 만들어 각각 동일한 알고리즘을 적용하여 최종 집계를 한다면

 

voting은 데이터 샘플에 대해 여러 알고리즘을 적용하여 최종 집계하는 방식

 

 

 

bagging은 데이터셋에서 bootstrap sample을 하여 각각에 동일한 알고리즘을 적용한 뒤 voting을 하여 최종 결정

 

일반적인 voting은 동일한 데이터셋에 여러 알고리즘을 적용한 뒤 전부 voting하여 최종 결정

 

hard voting은 다수 분류기가 예측한 label중 가장 많이 예측한 다수결 원칙을 따라 최종 결정함

 

소수의 결정은 신경 쓰지 않는다는 점이 하나의 단점?

 

hard voting을 설명한 그림

 

 

soft voting은 모든 분류기들의 label에 대한 확률들의 평균을 구하여 가장 높은 확률을 가진 값을 label로 결정하는 방식

 

모든 분류기들의 결정을 고려하므로 일반적으로 많이 씀

 

soft voting의 도식

 

 

5. boosting

 

여러개의 분류기가 순차적으로 학습됨

 

이전 분류기가 예측에 틀린 데이터에 대해선 올바르게 예측할수 있도록 다음 분류기에 데이터의 가중치를 부여하면서 학습을 진행함

 

가중치를 부여하는 boosting을 하면서 학습을 진행한다고 하여 boosting이라고 이름이 붙음

 

보통 배깅에 비해 성능이 좋아 앙상블에서 많이 사용하고 LightGBM, XGBoost, CatBoost 등이 대표적인 boosting 알고리즘이다

 

그러나 순차적이고 sequential하게 학습을 해야하므로 bagging에 비해 속도가 느리고 overfitting이 발생할 가능성이 존재한다

 

boosting 알고리즘 도식

 

bagging은 여러 데이터 샘플에 동일한 모델을 병렬로 학습하는 방식이고

 

boosting은 데이터를 샘플링한 후 첫번째 모델을 학습하고 에러에 가중치를 부여한 데이터 샘플링 후 다시 학습시키고

 

이 과정을 반복하여 강력한 하나의 모델을 순차적으로 학습함

 

 

 

bagging은 동일한 모델을 여러 샘플에 대해 병렬적으로 학습

 

boosting은 데이터 샘플링 후 모델 하나를 학습시키고 에러에 가중치를 둔 샘플링 후 다시 학습시키면서 순차적으로 강화해 나가는 학습

 

 

6. stacking

 

여러 모델을 활용해서 각각의 예측 결과를 도출한 뒤 예측결과를 결합해 최종 예측 결과를 도출하는 방식

 

데이터에 대해 여러 모델을 사용하여 학습한 여러개의 base learner

 

이 여러개의 base learner들이 학습하여 예측한 결과를 다시 training set으로 만들어 새로운 final meta model을 학습하여 최종 예측을 수행하는 방식

 

구체적으로 예를 들어보면 (x_train,y_train)으로부터 3개의 모델 svm, random forest, decision tree를 training시켰다

 

x_test에 대해서 각각 3개의 모델이 prediction하면 x_pred, x_pred2, x_pred3를 얻고 다시 (x_pred,x_pred2,x_pred3)로 새로운 training set을 만든다

 

final model을 ([x_pred,x_pred2,x_pred3],y_test)로 training하여 최종 예측을 수행한다

 

 

 

단일 모델에 비해 성능이 향상될 수는 있는데 overfitting의 위험이 있어서 보통은 cross validation 기반의 stacking을 사용한다고 함

 

이거 읽어봤는데 솔직히 무슨소린지 도저히 모르겠다...

 

보통 경진대회에서 마지막으로 성능을 짜내기 위해 사용하는 방법

 

요즘에는 잘 안쓰는 것 같다고함 굉장히 많은 base learner와 meta model을 조합해야해서

 

base 모델의 성격이 완전히 달라야 성능 향상 효과를 얻는데 그 과정이 너무 복잡하고 시간도 너무 많이 듦

 

현실적인 production level에서는 사실상 사용할 수 없는 비현실적인 기법

 

kaggle이 stacking으로 너무 성능을 올리려고 하여 비판받긴함

 

그래서 요즘엔 code competition으로 시간을 제한하기도 함

TAGS.

Comments