본문 바로가기
ML | DL

RandomForest, XGBoost, LGBM, CatBoost뭐가 다를까?

by 편의점소세지 2021. 6. 9.
반응형

Dacon 머신러닝 대회를 준비하면서 예측모델을 만드는데, 앙상블도 하고 스태킹도 하는데 주로 RandomForest, XGBoost, LGBM, CatBoost를 성능이 잘나와서, 사용하고 있었습니다. 이 모델들이 어떻게 구현되어 있고 작동하는지 좀더 자세히 알아보고자 하며, 많은 초보 개발자분들은 이것이 어떻게 작동하는지 자세히 이해지 못했을 것입니다.

 

 원리보다는 사용법과 성능만 알고 있을 거라 생각됩니다. 잘 알고 쓴다면 하이퍼파라미터와 성능을 높이는 방법과 시간 낭비를 줄일 수 있을 것으로 생각됩니다.

RandomForest

 의사결정나무(DecisionTree)모델을 기반으로 만들어진 모델입니다. 의사결정나무(DecisionTree)는 다들 아시다시피 어떠한 데이터가 있으면 특정 기준으로 (예 / 아니요)으로 이진 분류를 시키면서 분류하여 특징별로 분류하는 모델입니다.

의사결정트리의 문제는 모든 feature를 갖고 분류했을 경우 과적합이 이뤄지는 경우가 많습니다. 따라서 이런 부분을 보안하여 나온것이 RandomForest입니다.

 

RandomForest는 여러개의 의사결정나무모여서 bagging 앙상블한 모델입니다. 전체의 feature가 100개가 있다면 100개 모두를 사용했을 경우 과적합이 나기때문에, 10~20개 정도를 선택해서 만든 의사결정나무(DecisionTree) 여러개를 만들어 Forest를 만드는 것입니다. 

 

이 때문에 RandomForest의 하이퍼파라미터는 의사결정나무와 매우 유사하고 의사결정나무의 경우 max_features=None이 되어 있지만, RandomForest의 경우는 max_features='auto'가 되어 있는 것입니다.

 

XGBoost

 XGBoost 또한 여러개의 의사결정나무를 앙상블한 알고리즘입니다. 하지만 XGBoostRandomForest와 달리 boosting 앙상블로 구현된 모델입니다.

boosting방식이란, 한개의 예측 모델에 대한 error를 줄이는 방식의 앙상블 기법입니다. 

 

예를 들어, 첫 번째 의사결정 나무가 있어 이를 통한 예측 모델이 있을 때, 이것의 오차 값을 다시 의사결정나무로 오차를 줄이고 그 오차를 똑같은 방식으로 줄이고 줄이는 방식입니다.

 

Gradient boost(GBM)와 같은 방식은 앙상블 모델이지만, 병렬 학습이 지원되어 더 빠른 학습이 가능하게 됐습니다.

 

LightGBM

LightGBM XGBoost와 마찬가지로 GBM모델을 기반으로 만들어진 모델입니다. XGBoost가 병렬 처리 지원이 돼서 GBM보다는 빠른 처리속도를 갖지만 아직도 학습속도가 느립니다. 학습속도를 개선하기 위해 LightGBM이 나왔습니다.

 

LightGBM의 차이점은 학습 방법에서 트리를 생성할 때 Level-wise 방법으로 생성하지 않고 Leaf-wise방법으로 트리를 만들어 나갑니다. 

 

예를 들어, 일반적인 의사결정나무는 한층에서 가지를 만들면 다른 층에서 가지를 만들어주고 다음 단계로 넘어가는데, 

LightGBM은 층에 대한 제약 없이 잎에서 가지를 치고 또 가지를 치는 방식으로 의사결정나무를 만들어나갑니다.

출처 : https://www.analyticsvidhya.com/blog/2017/06/which-algorithm-takes-the-crown-light-gbm-vs-xgboost/

 

위 과정에서 적은 메모리를 사용하게 되고, 빠른 모델 생성과 다른 부스팅 방법의 알고리즘에 비해 높은 성능을 보여줍니다. 또한, 병렬 처리까지 지원하게 되어 매우 빠른 속도록 학습하면서 높은 성능을 보여주게 되는 것이죠.

 

하지만, 이런 Leaf-wise 방식의 단점은 과적합에 취약하다는 점입니다. 따라서, 데이터 수가 적을 경우 과적합이 일어날 수 있기 때문에 LightGBM보다는 XGBoost를 추천드립니다.

 

CatBoost

Catboost는 앞서 말한 LightGBM의 오버피팅 문제점을 해결하기 위해 만들어진 모델이며, 범주형 변수의 예측모델에 최적화된 모델입니다. 

 

Catboost의 몇 가지 중요한 특징들을 나열자하면 

1. Level-wise 방식의 모델 생성

 

2. Ordered boosting방식으로 부스팅

 - 일반적인 boosting방식은 전체적인 오차에 대한 값으로 모델을 앙상블하지만, Ordered Boosting은 부분의 오차에 대해 모델을 생성하고 데이터들을 늘려나가는 식입니다. 이 방식으로 과적합을 줄이게 됩니다.

 

3. Ordered Target Encoding(Mean Encoding) 범주형 변수 변환

 - 독립변수의 범주형 변수가 종속 변수의 평균으로 인코딩하는 것입니다. 이렇게 했을 때 독립변수가 일반적인 0,1인코딩했을 때보다 data와의 연관성이 생기게 됩니다. 

 

4. Categorical Feauture Combinations 범주형 변수 결합

 - 연관된 범주형 변수를 자동으로 결합시켜 줌으로써 변수를 줄입니다.

있습니다.

 

이렇게 범주형 변수에 대해서 특정 인코딩 방식을 통해 정확도와 속도를 높이기도하지만, 연속형 변수가 많을 경우 catboost에 속도가 현저하게 떨어지는 단점이 있습니다. 

 

따라서, catboost를 사용할 때 변수들을 범주형으로 만들려는 노력을 많이합니다.

 

 

개인적으로 catboost와 lgbm이 제일 흔하게 사용되고 있다고 생각되며, 앞으로 머신러닝 과제를 진행할 때 이런 모델들의 특징을 잘 파악하고 사용한다면 더 높은 성능의 모델을 만들 수 있을 것이라 생각됩니다. 

 

 

출처:

https://dailyheumsi.tistory.com/136

https://wooono.tistory.com/115

https://bcho.tistory.com/1354

 

반응형

댓글