데이터과학 삼학년

LightGBM vs CatBoost vs XGBoost 본문

Machine Learning

LightGBM vs CatBoost vs XGBoost

Dan-k 2023. 5. 12. 13:50
반응형

LightGBM, CatBoost, XGBoost는 모두 gradient boosting 알고리즘을 기반으로 한 머신러닝 라이브러리

이들의 공통점은 모두 다양한 데이터 타입(범주형, 연속형)의 feature를 다룰 수 있으며, 빠른 속도로 대용량 데이터셋을 처리할 수 있음

LightGBM

  • Leaf-wise tree growth 알고리즘 사용
  • 데이터 셋의 크기가 큰 경우에 유리
  • 예측 성능이 뛰어나며, 빠른 속도로 학습 가능
  • GPU 가속도 지원
  • 카테고리형 특성 자동 처리 기능 지원

CatBoost

  • Category Boosting 알고리즘 사용
  • 카테고리형 특성 자동 처리 기능 지원
  • Overfitting 방지를 위한 자체 규제 기능 제공
  • 빠른 속도와 높은 정확도 보장
  • GPU 가속도 지원
  • 대용량 데이터 학습에도 뛰어난 성능을 발휘

XGBoost

  • Depth-wise tree growth 알고리즘 사용
  • 예측 성능이 뛰어나며, 빠른 속도로 학습 가능
  • 병렬 처리 기능을 사용하여 높은 속도 보장
  • GPU 가속도 지원
  • 규제 기능과 이상치 처리 기능 제공
  • 높은 정확도와 일반화 성능 보장

알고리즘 방식

  • XGBoost: Gradient Boosting 알고리즘을 기반으로 하되, regularization과 다양한 loss function 등의 기능이 추가된 알고리즘입니다.
  • LightGBM: Decision Tree를 기반으로 한 Gradient Boosting 알고리즘으로, Leaf-wise Tree Growth 방식을 사용하여 학습을 진행합니다.
  • CatBoost: 대부분의 머신러닝 알고리즘에서 처리하기 어려운 카테고리형(categorical) 특징을 효과적으로 처리할 수 있도록한 알고리즘입니다.

속도

  • LightGBM  > XGBoost > CatBoost:

Hancock, John T., and Taghi M. Khoshgoftaar. "CatBoost for big data: an interdisciplinary review." Journal of big data 7.1 (2020): 1-45.APA

종합 비교

https://www.kdnuggets.com/2018/03/catboost-vs-light-gbm-vs-xgboost.html

 

코드 예시

LightGBM

import lightgbm as lgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Split dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create LightGBM dataset
lgb_train = lgb.Dataset(X_train, y_train)
lgb_test = lgb.Dataset(X_test, y_test, reference=lgb_train)

# Set parameters
params = {
    'boosting_type': 'gbdt',
    'objective': 'multiclass',
    'num_class': 3,
    'metric': 'multi_logloss',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9
}

# Train model
model = lgb.train(params, lgb_train, num_boost_round=100)

# Predict on test set
y_pred = model.predict(X_test)
y_pred = [list(x).index(max(x)) for x in y_pred]

# Calculate accuracy
accuracy = accuracy_score(y_test, y_pred)
print('LightGBM Accuracy:', accuracy)

CatBoost

import catboost as cb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Split dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create CatBoost dataset
cb_train = cb.Pool(X_train, y_train)
cb_test = cb.Pool(X_test, y_test)

# Set parameters
params = {
    'iterations': 100,
    'learning_rate': 0.05,
    'depth': 6,
    'loss_function': 'MultiClass',
    'eval_metric': 'Accuracy'
}

# Train model
model = cb.train(params, cb_train)

# Predict on test set
y_pred = model.predict(cb_test)
y_pred = [int(round(x)) for x in y_pred]

# Calculate accuracy
accuracy = accuracy_score(y_test, y_pred)
print('CatBoost Accuracy:', accuracy)

XGBoost

pythonCopy code
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Split dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create XGBoost dataset
xgb_train = xgb.DMatrix(X_train, label=y_train)
xgb_test = xgb.DMatrix(X_test, label=y_test)

# Set parameters
params = {
    'objective': 'multi:softmax',
    'num_class': 3,
    'max_depth': 6,
    'learning_rate': 0.05,
    'subsample': 0.9,
    'colsample_bytree': 0.9
}

# Train model
model = xgb.train(params, xgb_train)

# Predict on test set
y_pred = model.predict(xgb_test)
y_pred = [int(round(x)) for x in y_pred]

# Calculate accuracy
accuracy = accuracy_score(y_test, y_pred)
print('XGBoost Accuracy:', accuracy)
728x90
반응형
LIST
Comments