이전 포스팅에서 Ensemble Learning(앙상블 러닝)과 관련하여 보팅과 배깅에 대해서 알아보았다. 

이번에는 앙상블 러닝 중에서도 가장 많이 사용되는 기법인 부스팅에 대해서 알아볼 것이다. 

 

 

Boosting

 

부스팅의 유형에는 크게 AdaBoost와 GradientBoost가 있다. 

AdaBoost보다는 GradientBoost가 더 많이 사용되는 기법이기는 하지만, 부스팅에 대한 기본적인 개념을 이해하기 위해 먼저 AdaBoost에 대해서 알아볼 필요가 있다.

 

 

 

AdaBoost

 

기존에 알아보았던 앙상블 러닝(보팅과 배깅)에서는 여러개의 약한 학습기를 학습시키는 순서가 큰 상관이 없었다.
하지만, 부스팅이라는 기법은 학습기를 '순차적'으로 학습 - 예측해야 한다.

부스팅의 원리는 이전에 잘못 예측한 데이터에 가중치를 부여한 후, 업데이트 된 데이터를 이용하여 다음 학습기가 학습 - 예측하는 것이다. 이렇게 모든 학습기가 학습 - 예측을 거치면, 그동안 나온 결과를 모두 결합하여 예측을 수행한다. 

 

(이미지 출처 : https://tkdguq05.github.io/2019/05/15/Boosting/)

위의 이미지를 보면 첫 번째 약 분류기에서 제대로 분류하지 못한 + 3개가 두 번째 약 분류기에서는 가중치를 부여받은 모습이다. 마찬가지로 두 번째 약 분류기에서 제대로 분류하지 못한 - 3개가 세 번째 약 분류기에서 가중치를 부여받은 것을 볼 수 있다. 

최종적으로는 3개의 학습기에 대한 결과를 종합하여 더 정확하고 세부적인 분류기를 만들 수 있다. 

 

 

 

GBM(Gradient Boosting Machine)

 

GradientBoost, 정확하게 Gradient Boost Machine으로 줄여서 GBM이라고 부른다.
 
AdaBoost와의 차이점은 GBM은 틀린 예측에 대하여, 가중치를 '경사 하강법'이라는 방식을 통해서 부여한다. 

경사하강법이란 간단하게는 오류값(= 실제값 - 예측값)이 최소가 되도록 (편)미분을 통해서 가중치의 업데이트 양을 조절하는 방식을 의미한다. 이 개념은 회귀에서 중요한 개념이므로, 이후 회귀를 다루는 포스팅에서 더욱 자세하게 설명할 것이다.  
가중치를 부여하는 방식을 제외하고는 AdaBoost와 동작하는 원리가 동일하다. 

(Scikit-learn에서는 GradientBoostingClassifier 클래스를 통해서 GBM 기반의 분류를 사용할 수 있다.)

 

 

GBM(Boosting) VS RandomForest(Bagging)

 

일반적으로 GBM의 성능이 랜덤 포레스트의 성능보다 낫다. 하지만, 수행시간이 오래 걸리고, 랜덤 포레스트보다 하이퍼 파라미터를 튜닝하는 데에 더 많은 시간을 투자해야 한다. 특히, GBM은 병렬처리가 되지 않아 대용량 데이터의 경우 학습에 매우 많은 시간이 필요하다는 것이 치명적인 단점이다. 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기