개발/AI 공부

머신러닝(CatBoost, LightGBM, XGBoost) 공부하기

beomcoder 2023. 3. 14. 11:17
728x90
반응형

Kaggle을 비롯한 데이터 경진대회 플랫폼에서 항상 상위권을 차지하는 알고리즘 XGBoost, LightGBM, CatBoost에 대해 정리하고 차이점을 비교해보려고 한다.

 

내가 부트캠프에서 인공지능을 배웠을때나 다른 교육을 들었을때 항상 처음부터 썼던 모델이니 방법론부터 배우다 보니까 최근에 쓰이는 모델, 현재 쓰고 있는 무엇인가를 배욱기도 전에 교육이 끝난다. 나는 예전 것도 배워서 차근차근 배우는 것도 중요하지만 쓸만한 것들을 배우고 싶었다.

 

나는 decision tree, random forest 같이 옛날에 만들어져서 지금은 쓰여지지 않는 머신러닝기법만 배우다가 교육기간이 끝났다. 중간에 부트캠프 내 대회를 개최하거나 다른 대회를 참여할때도 부트캠프에서 배운 머신러닝만 쓰다가 점수도 내지 못하고 찾아보고 xgboost, light gbm, catboost 등을 찾아서 썼었다. 하지만 그때는 뭐가 먼저 나왔고, 내 상황에서는 어떤 모델을 써야하는지도 몰랐다.

 

지금 회사에서 팁스준비를 진행하고 있기 때문에  다양한 모델들을 공부해보려고 한다.

나는 지금 팁스준비로 공부해야할 부분이 지도학습의 분류파트이다. 추후에 군집화도 사용하여 추천서비스를 개발해야 하지만 우선은 지도학습을 먼저 공부해보려고 한다.

 

 

결정트리와 랜덤포레스트는 많이 쓰이지 않아 비교적 최신 머신러닝 기법인 xgboost, lightGBM, CatBoost의 차이를 비교해보고 어떤 모델을 사용할지 정해보려 한다.

XGBoost

XGBoost는 기본적으로 GBM과 같이 decision Tree의 앙상블 모형이고 풀어서 말하면 여러 개의 약한 의사결정나무(Decision Tree)를 조합해서 사용하는 앙상블(Ensemble) 기법 중 하나이다. 이름의 뜻은 Extreme Gradient Boosting의 약자이다. 해석하면 극한 변화도(경사도) 부스팅이라는 뜻이다. Gradient Boost 알고리즘을 병렬 학습이 지원되도록 구현한 라이브러리가 XGBoost 이다.

 

Image나 Text와 같은 비정형데이터에서는 Nerual Network 모델이 압도적인 성능을 보이고 있지만, 정형데이터에서는 XGBoost와 같은 tree based 알고리즘이 아직까지도 많이 쓰인다. Regression, Classification 문제를 모두 지원하며, 성능과 자원 효율이 좋아서, 인기 있게 사용되는 알고리즘 이다.

 

장점

  • GBM 대비 빠른 수행시간
  • 병렬 처리로 학습, 분류 속도가 빠르다.
  • 과적합 규제(Regularization)
  • 표준 GBM 경우 과적합 규제기능이 없으나, XGBoost는 자체에 과적합 규제 기능으로 강한 내구성 지닌다.
  • 분류와 회귀영역에서 뛰어난 예측 성능 발휘
  • 즉, CART(Classification and regression tree) 앙상블 모델을 사용
  • Early Stopping(조기 종료) 기능이 있음
  • 다양한 옵션을 제공하며 Customizing이 용이하다.
  • Missing Values : 결측치를 내부적으로 처리해준다. 실제로 kaggle에 적용해보는 과정에서 편리함

 

LightGBM

LightGBM의 메인 기술은 GOSS(Gradient-based One-Side Sampling)이다. GOSS는 Information gain을 계산할 때 기울기가 작은(가중치가 작은)개체에 승수 상수를 적용하여 데이터를 증폭시킨다. 이렇게 함으로써 데이터 분포를 많이 변경하지 안혹도 훈련이 덜 된 개체에 초점을 보다 잘 맞출 수 있다. 이 방법으로 LightGBM이 XGBoost보다 속도와 성능면에서 모두 좋은 퍼포먼스를 가진다.

 

기존의 방식과 달리 LightGBM에서 채택한 leaf-wise(리프 중심 트리 분할)은 트리가 깊어지면서 소요되는 시간과 메모리 모두를 절약 할 수 있다. 하지만 이 LightGBM은 적은 데이터셋(약 10000건)에서는 과적합이 일어난다. 그래서 데이터셋이 많을때 사용해야 한다. 또 하나의 특징으로는 우리는 모델을 학습시킬 때 범주형 변수들을(Object, Category) 숫자형 변수로 바꾸어서 학습시킨다. 그 방법으로 가장 널리 쓰이는 것이 원핫인코딩인데, 트리 모델에서 high cardinality categorical features(범주의 개수가 많은 변수)를 원핫인코딩하여 넣게 되면 트리가 언밸런스 해지고, 좋은 성능을 내기 위해 더 깊어진다고 한다. 즉, 훈련시키는 데 시간이 더 소요되고 과적합할 위험이 높다. 이것을 대비하여 LGBM에서는 Category type의 변수도 그대로 학습이 된다. 실제로도 원핫인코딩보다 성능이 뛰어나다고 하니 알아두면 좋을 듯하다.

 

CatBoost

 

CatBoost는 기계 학습 분야에서 사용되는 gradient boosting 알고리즘 중 하나이다. CatBoost는 카테고리형 변수를 다루는 데 있어서 매우 강력한 기능을 제공하며, 대규모 데이터 집합에서 높은 정확도를 보이는 것으로 알려져 있다. CatBoost의 핵심 기능 중 하나는 자동으로 카테고리형 변수를 처리하는 것이다. 기존의 gradient boosting 알고리즘들은 카테고리형 변수를 수치형 변수로 변환해야 하는 번거로움이 있었다. 하지만 CatBoost는 카테고리형 변수를 자동으로 처리하여 모델 학습을 보다 쉽게 만들어준다. 또한 CatBoost는 overfitting을 방지하는 기능도 제공한다. 이를 위해 CatBoost는 데이터를 무작위로 섞어서 학습하고, 자동으로 regularization을 적용한다. 이를 통해 과적합을 방지하고 모델의 일반화 성능을 향상시킨다. CatBoost는 다양한 분야에서 사용될 수 있으며, 특히 대규모 데이터 집합에서 높은 성능을 보이는 것으로 알려져 있다. CatBoost는 Python, R, C++ 등 다양한 프로그래밍 언어에서 사용할 수 있다.

 

 

XGBoost 와 더불어 Catboost 는 Level-wise 로 트리를 만들어나간다. Level-wise 와 Leaf-wise 의 차이는, 그냥 직관적으로 말하면 Level-wise 는 BFS 같이 트리를 만들어나가는 형태고, Leaf-wise 는 DFS 같이 트리를 만들어나가는 형태다. 물론 max_depth = -1 이면 둘은 같은 형태지만, 대부분의 부스팅 모델에서의 트리는 max_depth != -1 이기 때문에 이 둘을 구분하는 것이다.

 

 

3개의 머신러닝에 대해 알아보았는데, 나는 우리 어플이 데이터도 많고 범주형데이터가 많기때문에 Light GBM을 선택하기로 했다. 이제 데이터셋을 전처리하고 모델을 테스트해보고 있다. 내가 예상하기로 Light GBM이 잘 맞을 것 같지만 혹시 모르기 때문에 머신러닝을 각각 학습시켜 가장 좋은 정확도를 가진 모델을 사용할 예정이다.

 

 

728x90
반응형