본문 바로가기
Learning-driven Methodology/ML (Machine Learning)

[Machine Learning] Boosting Methods (3)

by goatlab 2023. 7. 11.
728x90
반응형
SMALL

LightBoost

 

https://towardsdatascience.com/catboost-vs-lightgbm-vs-xgboost-c80f40662924

 

LGBM (Light Gradient Boosting Machine)은 2017년 마이크로소프트에서 처음 출시되었으며 사용자가 선호하는 또 다른 Gradient Boosting 방법이며 의사 결정 트리 기반이다. 다른 방법과의 핵심적인 차이점은 잎을 기준으로 트리를 분할한다는 것이다. 즉, 포인트 촬영에 필요한 단위를 감지하고 중지할 수 있다 (다른 것은 깊이 기반 또는 레벨 기반임). LGBM은 잎 기반이므로 오차를 줄여 정확도와 속도를 높이는 측면에서 매우 효과적인 방법이다. 특수 알고리즘을 사용하여 범주형 데이터를 분할할 수 있지만 열의 문자열 이름 대신 인덱스와 같은 정수 값을 입력해야 한다.

 

import numpy as np
from time import time
from lightgbm import LGBMClassifier
from sklearn.datasets import make_classification 
from sklearn.model_selection import cross_val_score,train_test_split
from sklearn.model_selection import KFold

x,y = make_classification(n_samples=100000, n_features=30, n_informative=10, 
                          n_redundant=5, random_state=2023)
lgbm = LGBMClassifier()

start_lgbm = time()
kf = KFold(n_splits=5,shuffle=True, random_state=2023)
lgbm_score = cross_val_score(lgbm, x, y, cv=kf, n_jobs=-1)

print("lgbm", np.round(time() - start_lgbm, 5))
print("acc", np.mean(lgbm_score).round(3))
lgbm 30.09303
acc 0.965

 

CatBoost

 

https://catboost.ai/news/catboost-enables-fast-gradient-boosting-on-decision-trees-using-gpus

 

캣부스트는 2017년 Yandex에 의해 개발되었다. One-Hot-Encoding을 사용하여 모든 범주형 피쳐를 숫자로 변환하므로 이 이름은 범주형 부스팅에서 유래되었다. 열의 문자열 이름 대신 인덱스 값을 입력해야 한다. 또한, 결측 숫자 값도 처리한다. 그리고 XGBoost보다 훨씬 빠르다. 다른 부스팅 방법과 달리 Catboost는 각 레벨의 노드에서 동일한 분할을 사용하는 대칭 트리로 구분한다.

XGBoost와 LGBM은 각 데이터 포인트에 대한 잔차 오차를 계산하고 잔차 목표값을 갖도록 모델을 훈련시킨다. 반복 횟수에 대해 이를 반복하여 잔여 오차를 훈련시키고 낮추어 목표에 도달한다. 이 방법은 각 데이터 점에 적용되므로 일반화 측면에서 약할 수 있으며 과적합이 발생할 수 있다.

또한 Catboost는 각 데이터 점에 대한 잔차를 계산하고 다른 데이터로 학습된 모델을 사용하여 잔차를 계산한다. 이러한 방식으로 각 데이터 점에 대해 서로 다른 잔차 데이터를 얻는다. 이러한 데이터는 대상으로 평가되며 일반 모델은 반복 횟수만큼 훈련된다. 많은 모델들이 정의에 의해 구현될 것이기 때문에, 이 계산 복잡성은 정말 비싸 보이고 시간이 너무 많이 걸린다. 하지만 주문된 부스팅으로 더 짧은 시간 내에 완성된다. 각 데이터 점(n+1)번째에 대해 계산된 잔차의 시작부터 시작하는 대신 순서가 지정된 부스팅이다. 데이터 포인트의 잔여량을 나타냅니다. (n+2)번째 데이터 점을 계산하려면 (n+1)번째 데이터 점 등을 적용한다.

 

l2_leaf_reg 비용 함수의 L2 정규화 항
learning_rate 그레디언트 단계이며, 과적합 시 학습률을 낮춘다.
depth 나무의 깊이이며, 대부분 6-10 사이에 사용된다.
one_hot_max_size 주어진 매개 변수 값보다 작거나 같은 여러 다른 값을 가진 원핫인코딩으로 모든 범주형 피쳐 인코딩
grow_policy 트리의 구성 유형을 결정한다. SymmetricTree, Depthwise, 또는Lossguid를 사용할 수 있다.
from catboost import CatBoostClassifier

cat = CatBoostClassifier()

start_cat = time()
kf = KFold(n_splits=5, shuffle=True, random_state=2023)
cat_score = cross_val_score(cat, x, y, cv=kf, n_jobs=-1)

print("cat", np.round(time()-start_cat,5))
print("acc", np.mean(cat_score).round(3))
cat 189.30019
acc 0.974
728x90
반응형
LIST