[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 Ensemble

Ensemble

  • 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법
  • Simple Voting, Bagging과 Boosting 방식이 있다.

Simple Voting

  • Hard Voting : 다수의 분류기들 간에 다수결로 최종 클래스를 선정하는 방법
  • Soft Voting : 다수의 분류기들이 각각 분류한 확률값들을 기반으로 평균 확률값을 내어서 더 높은 확률값을 갖는 클래스로 최종 선정하는 방법. 일반적으로 성능은 Soft voting 방법이 더 우수하다고 알려져 있다.

사이킷런에 내장되어 있는 위스콘신 유방암 데이터로 Simple Voting을 시행해보자.

모델은 LogisticRegressionKNN을 사용한다.

LogisticRegressionKNNLogisticRegressionVoting에 선출되었던 것을 확인할 수 있다.

Bagging - RandomFroest Model

  • 각각 만들어낸 결과를 마지막에 최종적으로 모으는 방식이다.
  • 속도가 빠르고 좀 더 로버스트하게 동작한다.

매개변수 튜닝 없이도 선형 모델이나 단일 결정 트리보다 높은 결과치를 제공하기도 함.

트리의 특성 중요도를 취합해서 계산해서 Voting에서 선출된 모델로 데이터를 분류해주는 방식이다.

트리의 갯수는 하이퍼파라미터인 n_estimator로 정할 수 있다.

Boosting

  • 하나의 모델의 결과를 보고 다른 모델들이 보완해주는 방식이다.
  • 속도는 느리지만 예측력은 더 뛰어나다.

GBM(Gradient Boosting Machine)

  • 경사하강법에 기반하여 부스팅하는 기법
  • 순차적으로 분류기들을 학습하기 때문에 학습시간이 상대적으로 오래걸린다는 단점

  • 특정 피쳐에 몰아주는 주는 성향을 보여준다.
  • Simple Voting보다는 좋은 성능을 보여준다.

XGBoost(eXtra Gradient Boosting)

  • Gradient Boosting의 속도가 느린 단점을 보완해 주고, 예측력이 뛰어나다.
  • GPU가 지원이 된다.(빅데이터 처리에 유리하다.)
  • Early Stopping을 사용하여 학습을 조기중단 할 수 있다.

사이킷런이 아닌 xgboost 자체에서 가져온다.

모델의 목적에 따라 eval_metric을 지정할 수 있다. 여기서는 logloss'를 사용하였다.(오차를 계산해주는 함수) 

학습이 진행 되는 따라 오차율이 떨어지는 것을 확인할 수 있다.

LightGBM

  • 대용량 데이터 처리에 적합하며 XGBoost와 마찬가지로 병렬처리인 GPU를 지원
  • 뿐만 아니라 메모리를 적게 사용하므로 빠른속도가 장점이다. 하지만 데이터 수가 너무 적을 때는 과적합 문제를 일으키기도 합니다.
  1. XGBoost 보다 학습에 걸리는 시간이 적음
  2. 메모리 사용량도 적음
  3. 특징
    • 일반 GBM 계열의 트리 분할 방법과 다르게 리프 중심 트리 분할(Leaf Wise) 방식, 최대 손실값을 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적으로 생성, 단 최대 손실값을 가지는 리프 노드를 지속적으로 분할해 생성된 규칙 트리는 학습을 반복할 수록 균형 트리 분할 방식보다 예측 오류 손실을 최소화
    • 기존 tree 방식들은 트리의 깊이를 효과적으로 줄이기 위한 균형 트리 분할 방식 사용(최대한 균형 잡힌 tree 유지, 따라서 트리의 깊이가 최소화 가능)
    • XGBoost보다 뒤늦게 나온 알고리즘
    • 동일한 데이터 셋이라 하더라도 양이 적거나, 하이퍼파라미터 값들에 따라 늘 이론과 동일한 결과치 보장 불가

 

Simple Voting 이미지 참조 사이트 : Hard vs Soft Voting Classifier Python Example - Data Analytics (vitalflux.com)