파이썬

Boosting 알고리즘

Leesemo 2021. 10. 9. 14:07

부스팅 기법이란 여러 개의 약한 머신러닝 기법을 차례대로 학습하는 과정에서 오류를 개선해 가면서 최종 성능을 높여 가는 앙상블 기법이다.

 

부스팅 기법은 여러 나무를 병렬 방식으로 학습하는 랜덤 포레스트 등의 방식보다는 느릴 수밖에 없다.

그 이유는 여러 나무 또는 머신러닝 기법들을 직렬 방식으로 순차적으로 학습하기 때문이다.

그래서 속도의 문제를 해결하기 위해 새로운 부스팅 모델들이 개발되는데, 그것이 바로 XGBoost, LightGBM, CatBoost이다.

이번 글에서는 위의 세 가지 부스팅 기법이 속도의 문제와 더불어 과적합의 문제를 어떻게 해결하는지에 대해서 알아볼 것이다.

 


XGBOOST

캐글 경연 대회에서 두각을 나타내면서 널리 알려져 각광을 받은 알고리즘으로, 특히 분류에서 뛰어난 예측 성능을 나타낸다. XGBoost는 직렬 학습을 근간으로 하는 GBM에 기반을 두면서도 병렬 학습을 가능하게 하고, 다양한 기능으로 빠르게 학습을 완료해 속도 문제를 해결한다. 예를 들면 나무를 형성할 때 더 이득이 없으면 가지치기를 해서 나무의 가지 만들기를 멈추게 한다.

 

또한 학습 데이터와 평가 데이터 세트에 대한 교차 검증을 통해 평가 데이터 세트의 평가값이 최적화되면 더는 학습을 반복하지 않게 해서 속도를 증가시킨다.

 

또한 과적합 문제를 해결하기 위해 규제 기능을 도입함으로써 과적합에 대한 저항력도 향상시킨다. 그리고 교차 검증, 성능 평가, 피처 중요도 등에 관한 시각화 기능이 있어 여러 가지 상황에서 판단을 용이하게 한다.

 


LightGBM

부스팅 계열의 알고리즘에서 XGBoost와 더불어 가장 많이 활용되는 것이 LightGBM이다. XGBoost가 나온 후 2년 뒤에 XGBoost의 장점은 살리고 단점은 보완하는 방식으로 LightGBM이 개발됐다.

 

대부분의 나무 기반 기법들은 균형 나무 분할 방식을 사용해 최대한 나무의 균형을 유지하면서 분할해 나무의 깊이를 줄이려고 한다. 이렇게 균형 잡힌 나무를 만들어야 과적합에 더 강한 구조를 가진다고 알려져 있기 때문이다.

 

이와 달리 LightGBM이 사용하는 리프 중심 나무 분할은 나무의 균형을 유지하는데 신경 쓰기보다는 최대 손실 값을 갖는 리프 노드들을 찾아 해당 노드들만을 계속 분할함으로써 비대칭적이고 깊이가 깊은 나무를 만든다.

 

이렇게 나무를 만들어 학습을 반복할수록 XGBoost의 Level-Wise 방식보다 예측 오류 손실을 최소화한다는 것이 LightGBM의 핵심이다. 그래서 LightGBM은 XGBoost보다 학습 시간이 훨씬 짧고 메모리 사용량도 상대적으로 적으면서도 예측 성능은 XGBoost와 별 차이가 없다. 하지만 데이터의 양이 10,000건 이하로 적어지면 과적합이 발생하기 쉽다는 단점이 있다.

LightGBM

 


CatBoost

LightGBM은 Leaf-Wise로 나무를 만들어 나가지만, CatBoost는 XGBoost처럼 Level-Wise로 나무를 만들어 나간다. CatBoost는 나무의 균형을 더 중요시한다. 그래서 기존의 부스팅 과정과 전체적인 양상은 비슷해 보이지만 몇 가지 다른 측면이 있다.

 

기존의 부스팅 모델은 잔차를 학습하는 모델을 만들고, 이 모델을 활용해 잔차를 예측하고, 이를 실제 예측값을 업데이트 하는 데 사용하는 과정을 되풀이한다.

기존의 부스팅 모델은 잔차를 학습할 때 훈련 데이터 전체로 학습하는 데 반해, CatBoost는 일부 훈련 데이터로 잔차를 계산하고 이것으로 학습해 모델을 만든다.

그리고 이 모델을 이용해 나머지 훈련 데이터의 잔차를 예측해 사용하는 과정을 되풀이한다. 이것을 Ordered Boosting이라고 한다. 

 

10개의 데이터가 있다고 해보자.

Ordered Boosting은 우선 첫 번째 데이터의 잔차만 계산하고 이를 기반으로 학습해 모델을 만든다.

그리고 이 모델을 이용해 두 번째 데이터의 잔차를 예측한다.

그 다음 잔차로 만들어진 첫 번째, 두 번째로 데이터로 학습하고 모델을 만든다.

이 방식을 반복해 모든 데이터의 잔차를 만들 때까지 계속 되풀이된다.

 

이렇게 Ordered Boosting을 하다 보면 데이터 순서가 같아 매번 같은 순서로 잔차를 예측하는 모델을 만든다.

이렇게 되면 과적합의 문제가 발생할 가능성이 높아진다.

그래서 CatBoost에서는 잔차를 예측할 데이터를 순서대로 하지 않고 셔플링해 랜덤하게 선정되도록 한다.

이것을 Random Permutation이라고 부르는데, 이렇게 하는 이유는 결국 나무를 다각적으로 만들어 과적합을 방지할 수 있기 때문이다.

 

 

XGBoost나 LightGBM은 파라미터 튜닝에 매우 민감하다. 예를 들면 파라미터를 어떻게 설정하는가에 따라 나무의 깊이가 달라지면서 과적합에 영향을 준다. 이와 달리 CatBoost는 기본 파라미터의 최적화가 잘되어 굳이 파라미터를 튜닝할 필요가 없다. 튜닝하더라도 대부분 결과치가 큰 차이를 보이지 않아, 파라미터 튜닝에 소요되는 시간을 줄이려는 것이다.