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 | 검증에 사용하는 함수
|
|
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
'Data Analytics with python > [Machine Learning ]' 카테고리의 다른 글
OLS 고급 수식 구문 (0) | 2023.02.22 |
---|---|
[Regression/Classification] 교차 검증과 하이퍼 파라미터 튜닝 + pipeline (0) | 2023.02.16 |
[Classification] Decision Tree (0) | 2023.02.15 |
[Clustering] DBSCAN (0) | 2023.02.15 |
[Clustering] GMM (0) | 2023.02.15 |
댓글