본문 바로가기
Data Analytics with python/[Machine Learning ]

RFC, GBM, XGBoost, LightGBM hyper-parameter tuning

by 보끔밥0130 2023. 6. 19.
728x90

트리 기반 자체의 하이퍼 파라미터가 많고 배깅, 부스팅, 학습, 정규화 등을 위한 하이퍼 파라미터가 추가되어 튜닝하기 어렵기에 하이퍼 파라미터에 대한 이해가 필요합니다.

 

파라미터를 튜닝하는 경우의 수 

1. 피처(Feature)의 수가 매우 많습니다.

2.피처(Feature) 간 상관되는 정도가 많습니다.

3.데이터 세트에 따라 특성이 있는 경우 (비대칭적인 분포 등)

Random Forest hyper-parameter

parameter  default  description
n_estimators 10 결정 트리의 개수
max_features ‘sqrt’ 최적의 분할을 위해 고려하는 최대 피처 개수
e.g.) 전체 피처가 16개라면 분할을 위해 4개 참조
max_depth None 트리의 최대 깊이를 규정
min_samples_leaf None 말단 노드가 되기 위한 최소한의 샘플 데이터 개수

GBM hyper-parameter

트리 기반 하이퍼 파라미터 : n_estimators, max_depth, max_features

 

parameter default  description
loss deviance 경사 하강법에서 사용할 비용 함수
learning_rate 0.1 [0,1] 값 지정가능한 학습을 진행할 때마다 적용하는 학습률
(Weak learner가 순차적으로 오류 값을 보정해 나가는데 적용하는 계수)
n_estimators 100 weak learner의 개수
subsample 1 weak learner가 학습에 사용하는 데이터의 샘플링 “비율”
(1은 전체 학습 데이터를 기반으로 학습)

XGBoost hyper-parameter

Default parameter  

parameter default description
silent 0 출력 메시지 표시 (1은 표기 안 함)
nthread   CPU의 실행 스레드 개수
booster gbtree gbtree(tree based model) or gblinear(linear model)

boost parameter

parameter  default  description
learning_rate 0.3 learning rate
num_boost_rounds   n_estimators
min_child_weight 1 트리에서 추가적으로 가지를 나눌지 큰 값이면 분할을 자제
gamma 0 트리의 리프 노드를 추가적으로 나눌지 결정
(최소 손실 값보다 작아야 노드를 분리)
max_depth 6 (보통 3~10) 트리의 최대 깊이를 규정
subsample 1 데이터 샘플링하는 비율 (보통 0.5~1)
colsample_bytree 1 트리 생성에 필요한 피처를 임의로 샘플링
reg_lambda 1 L2 Regularization 적용 값 (값이 클수록 과적합 감소 효과)
reg_alpha 0 L1 Regularization 적용 값 (값이 클수록 과적합 감소 효과)
scale_pos_weight 1 비대칭한 클래스로 구성된 데이터 세트의 균형을 유지하기 위함

learning task parameter 

parameter default  description
objective   최솟값을 가져야 하는 손실 함수
{binary:logistic, multi:softmax, multi:softprob}
eval_metric   검증에 사용하는 함수
  • reg: rmse, mae, logloss
  • class:error, merror, mlogloss, auc
early_stopping_rounds 100 조기 중단할 수 있는 최소 반복 횟수
(반복하는 동안 학습 오류가 감소하지 않으면 종료) 

파라미터가 많기에 과적합 문제가 있다면 다음의 경우를 고려해봅니다.

 

1) learning_rate 를 낮춥니다 -> 반대로 n_estimators는 높여줘야 합니다. 

2) max_depth를 낮춥니다.

3) min_child_weight 를 높입니다.

4) gamma를 높입니다.

5) subsample과 colsample_bytree를 조정해봅니다. (모델 복잡도 방지)

LightGBM hyper-parameter  

parameter default description
num_iterations 100 반복 수행하려는 트리의 개수,n_estimators와 같은 파라미터
learning_rate 0.1 부스팅 방식을 반복적으로 수행할 때 업데이트 되는 학습률
max_depth -1 leaf wise 기반으로 기존트리보다 깊이가 상대적으로 더 깊음
min_child_samples 20 결정 트리의 min_samples_leaf와 같은 파라미터(min_data_in_leaf)
즉, 리프 노드가 되기 위한 최소한으로 필요한 개수(데이터 개수) (과적합 방지)
num_leaves 31 하나의 트리가 가질 수 있는 최대 리프 개수
boosting gbdt 그래디언트 부스팅 결정 트리
subsample 1 데이터를 샘플링하는 비율 (bagging_fraction) (과적합 방지)
feature_fraction 1 개별 트리를 학습할 때마다 무작위로 선택하는 피처의 비율 (과적합 방지)
reg_alpha 0 L2 regulation 제어를 위한 값 (과적합 방지)
reg_lambda 0 L1 regulation 제어를 위한 값 (과적합 방지)

learning task parameter

parameter  default  description
objective   최솟값을 가져야 하는 손실 함수
{binary:logistic, multi:softmax, multi:softprob}

튜닝 방법 : num_leaves의 개수를 중심으로 min_child_samples(min_data_in_leaf), max_depth를 함께 조정합니다.

 

10,000 건 이하의 데이터 세트 XGBoost를 사용 해봅니다.

10,000 건  보다 많은 데이터 세트 LightGBM를 사용 해봅니다.

피처의 범주형 변수의 비율이 50% 이상이라면 CatBoost를 사용해 봅니다.

728x90

댓글