2022 데이터 사이언스/빅데이터 분석과 모델링

16. 분류(3): Ensemble

gool 2022. 7. 5. 19:13
앙상블(Ensemble)은 최적의 답을 찾아내기 위하여
여러 개의 머신러닝 알고리즘을 결합한 모델을 말한다.

 

 

 

앙상블(Ensemble)은 서로 다른 여러 머신러닝 모델을 이용하여 최적의 답을 찾아내는 기법이다.

중간 정도 성능의 모델(Weak Classifier)을 여러 개 생성하여 예측 결과의 평균을 구한다.

단일 분류 모델보다 믿을 만한 예측 결과(Strong Calssifier)를 도출하는 것이 앙상블의 목적이다.

 

앙상블 기법의 종류에는 보팅(Voting), 배깅(Bagging), 부스팅(Boosting)이 있다.

  • 보팅(Voting) : 서로 다른 알고리즘을 가진 분류 모델을 결합
  • 배깅(Bagging) : 샘플을 중복 생성하여 결과를 도출(Random Forest)
  • 부스팅(Boosting) : 이전 오차를 보완하며 가중치 부여(Gradient/XGBoosting, LightGBM)

 

 

 

보팅(Voting)과 배깅(Bagging)

 

 

 

 

보팅(Voting) 방식의 경우 하나의 데이터셋에 여러 가지 알고리즘을 적용하여 예측을 수행한다.

예를 들어 위 그림에서 세 개의 모델이 각각 1, 1, 2의 예측값을 냈다면 최종 예측값은 1이 된다.

 

배깅(Bootstrap Aggregating) 방식은 여러 개의 샘플 데이터셋에 같은 알고리즘을 적용한다.

각각의 데이터셋에서 도출된 예측 결과가 1, 1, 2이면 마찬가지로 최종 예측값은 1이다.

Bootstrap은 여러 개의 데이터셋을 중첩을 허용하여 샘플링하는 분할 방식을 말한다.

 

 

 

 

Random Forest 모델은 대표적인 배깅 방식의 알고리즘이다.

Decision Tree 기반의 알고리즘을 사용하며, Bootstrapping 방식으로 데이터셋을 구성한다.

실습에는 sklearn.ensemble 모듈의 RandomForestClassifier API를 사용한다.

 

* Argument(max_depth 등 Decision Tree 모델의 하이퍼 파라미터 대부분 사용 가능)

  • n_estimators  :  Random Forest에 사용할 Decision Tree 모델의 수
  • n_jobs  :  병렬 학습에 적용할 CPU thread의 수(-1: 시스템의 사용 가능한 최대 thread 사용)

 

* Attribute

  • classes_  :  학습에 사용된 클래스의 label 정보
  • estimators_  :  학습에 사용된 sub Decision Tree 모델 객체

 

 

 

 

부스팅(Boosting)

 

 

배깅(Bagging)과 부스팅(Boosting)

 

 

부스팅(Boosting) 방식은 여러 개의 샘플 데이터를 병렬로 처리하는 배깅 방식과 달리,

하나의 샘플 데이터로 학습하고 다시 샘플링하는 과정을 반복하며 데이터를 순차적으로 처리한다

동일한 알고리즘으로 샘플 데이터를 직렬로 처리하는 방식이다.

 

더욱 중요한 것은 약한 분류기(Weak Classifier)를 순차적으로 학습하는 과정에서,

이전 학습에서 잘못 예측된 데이터에 가중치를 부여하여 오차를 보완해 나간다는 점이다.

가중치가 부여된 데이터는 다음 학습의 샘플 데이터에 다시 포함된다.

 

 

부스팅은 잘못 예측된 데이터를 집중적으로 추출/샘플링하므로 성능이 매우 우수하다.

다만, 오차 보완이 목적이기 때문에 잘못된 레이블이나 Outlier에 필요 이상으로 민감할 수 있고,

데이터를 병렬로 처리하는 다른 앙상블에 비해 학습시간이 오래 걸린다는 단점이 있다.

 

 

 

그럼에도 위 도표에 보이는 것처럼 딥러닝을 제외한 일반 머신러닝 알고리즘의 경우

LightGBM, XGBoost 등 성능이 보장된 부스팅 방식의 모델이 압도적으로 많이 사용된다.

 

실습에는 XGBoost(eXtreme Gradient Boosting)를 사용한다. (xgboost의 XGBClassifier)

 

 

아래 링크에서 앙상블(Random Forest, XGBoost) 실습 코드를 확인할 수 있다.

 

https://github.com/tldnjs1231/data-analytics/blob/main/data-analytics-16-ensemble.ipynb

 

GitHub - tldnjs1231/data-analytics

Contribute to tldnjs1231/data-analytics development by creating an account on GitHub.

github.com