이전 포스팅에서 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은 병렬처리가 되지 않아 대용량 데이터의 경우 학습에 매우 많은 시간이 필요하다는 것이 치명적인 단점이다.
'기계학습 > Machine Learning' 카테고리의 다른 글
[파이썬 머신러닝 완벽가이드] : 사이킷 런 앙상블 러닝 ( Stacking ) (0) | 2020.08.25 |
---|---|
[파이썬 머신러닝 완벽 가이드] : 사이킷런 앙상블 러닝 ( XGBoost / LightGBM) (1) | 2020.08.21 |
[파이썬 머신러닝 완벽가이드] : 사이킷 런 앙상블 러닝 ( Voting / Bagging ) (0) | 2020.08.19 |
[파이썬 머신러닝 완벽가이드] : 사이킷 런 결정트리 하이퍼 파라미터, 시각화Graphviz (0) | 2020.08.12 |
[파이썬 머신러닝 완벽가이드] : 사이킷 런 앙상블러닝, 결정 트리 (0) | 2020.08.10 |
최근댓글