일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Satel
- Dice Loss
- Satellite Image
- SSAC
- segmentation
- sm-segmentation
- focal loss
- loss function
- LightGBM
- 시계열
- Today
- Total
고양이는 털털해
lightgbm 하이퍼 파라미터 본문
LightGBM 하이퍼 파라미터¶
Gradient Boosting Decision Tree with Gradient-based One-Side Sampling and Exclusive Feature Bundling
GBDT with GOSS and EFB
참조 : lightgbm은 ligbm과 scikitlearn 패키지로 사용할 수 있는데 api 마다 argument 이름이 달라서 해당 api에 맞게 사용해야 한다.
아래에서는 scikitlearn을 중심으로 이야기 하되 lightgbm의 argumnent도 언급하기로 한다.¶
- lightgbm.LGGMModel
-
lightgbm.LGBMModel(boosting_type='gbdt', num_leaves=31, max_depth=- 1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=- 1, silent=True, importance_type='split', **kwargs)
-
- lightgbm.LGBMClassifier
-
lightgbm.LGBMClassifier(boosting_type='gbdt', num_leaves=31, max_depth=- 1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=- 1, silent=True, importance_type='split', **kwargs)
-
- lightgbm.LGBMRegressor
-
lightgbm.LGBMRegressor(boosting_type='gbdt', num_leaves=31, max_depth=- 1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=- 1, silent=True, importance_type='split', **kwargs)
-
- lightgbm.LGBMRanker
boosting_type (***)
- gbdt(default : Gradient Bossted Decision Trees , dart : Drop out Regression Tress , goss : Gradient based One-Side Sampling)
- 이론적인 이해를 해야 선택이 가능할 것 같다.
- 보통 기본 값으로 쓴다고 하며 정확도가 중요할 때는 딥러닝 드랍아웃 같은 dart를 선택한다고 하는데 항상 좋은 예측력이 도출되는 것은 아니라고 한다. goss는 계산속도가 줄지만 예측력도 감소할 수 있다고 한다.
num_leaves (*) ; num_leaves=31
- decision tree는 분기 별 잎사귀가 두개로 나뉘는 이진트리 형태이기 때문에 n이 깊이라고 할 때 $2^n$ 형태로 최대 잎사귀 수가 정해진다.
- 때문에 최대 잎사귀 수보다 큰 잎사귀를 주는 것은 별 의미가 없을 것 같다.
- 최대 잎사귀 수 보다 적게 지정하면 일종의 규제로 작용한다고 한다.
max_depth (***) ; max_depth=-1
- 기본 설정은 제한 없는 분기이다.
- feature가 많은 경우 높게 설정하는 것이 좋을 것이다.
- 부스팅 방법에서는 깊이가 짧은 것은 보정되기 때문에 그리 중요 하지 않다는 의견도 있다.
learning_rate (***) ; learning_rate=0.1
- 미세한 정확도 조정을 원할 때 학습률을 줄이고 다른 파라미터를 튜닝한다고 한다.
- 보통 0.05~0.1로 시작하고 긴 소수점으로 조정하는 것은 큰 의미가 없다고 한다.
- boosting 반복을 얼마나 많이 할지를 지정하는 변수와 잘 조합해서 사용해야고 한다. num_iterations이나 num_boost_round 변수로 반복 수를 조정하는데 기본 값이 100이어서 너무 적다는 경험적인 의견이 많았다. 보통 학습할 때 1000 이상을 주고 early stopping을 조건으로 걸어둔다고 한다.
n_estimators () ; default = 100
- 얼마나 많은 부스팅 나무를 적합해 볼 것인지를 지정하는 인자.
- 별다른 언급이 없다.
subsample_for_bin () ; default =200000
- 나무 만들 때 사용할 샘플 수
- 별다른 언급이 없다.
objective=None,
- 풀려는 문제에 따라 binary, multiclass regression으로 알맞게 지정.
- 별 다른 언급은 없다.
class_weight=None
- balanced 나 None지정 가능
- 지정시 {class_label : weight} 형태로 연결된 값을 불러와서 사용하게 된다.
- sample_weight를 지정할 경우 그 가중치와 곱해서 계산될 것.
- 예측력에 영향 있으므로 신중할 것
- 이진 분류라면 is_nubalance or scale_pos_weight 인자로 조정
min_split_gain=0.0
- 분기가 되게 하는 최소 정보 이득을 지정.
- 유용한 분기의 수를 조정하는데 사용한다고 한다.
min_child_weight=0.001
- 하나의 나뭇잎에서 가져야 하는 최소 헤시안 행렬 합
- 별 다른 언급은 없다.
min_child_samples=20
- 하나의 나뭇잎에서 가져야 하는 최소 데이터의 수
- 별다른 언급은 없다.
- 너무 줄이면 과적합 위험이 있을 듯.
subsample (**) ; default=1.0
- 행 샘플링
- 데이터를 일부 발췌해서 다양성을 높이는 방법으로 사용한다고 한다. 민감한 옵션이므로 column sampling과 잘 섞어서 쓴다고 한다.
- goss 는 그래디언트가 큰 데이터 인스턴스만을 샘플링 해서 쓰기 때문에 goss를 사용하고 이 옵션을 조정하면 에러가 난다고 한다.
subsample_freq=0
- subsampling을 얼마나 자주할 것인지를 지정
- 기본 값은 하지 않도록 지정함
colsample_bytree (**) ; default=1.0
- 열 샘플링. 컬럼에 대한 샘플링을 수행. random forest에서 수행하는 기능.
- 정확도가 높아지는 측면이 있다고 한다.
- 열 샘플링을 하지 않는 1이 기본이나, 0.7~0.9 설정이 일반적이라고 한다.
reg_alpha (*) ; default=0.0
- L1정규화로 오버피팅을 막도록 하는 인자.
- 어떤 영향을 줄지 예측이 어려워 보통 조정하지 않는다고 한다.
reg_lambda (*) ; default=0.0
- L2 정규화. 보통 조정하지 않는다고 한다.
random_state=None
- 시드 주기
n_jobs=- 1
- 병렬 처리 스레드 수
silent=True
- 부스팅 수행 시 메시지 표시 여부
importance_type='split'
- 'split' 또는 'gain'
- featureimportance 에 저장되는 값을 어떻게 정할지를 지정.
- split이면 해당 피쳐 컬럼이 모델에 사용된 횟수를 값으로 한다.
- gain이면 해당 피쳐를 사용한 분기에서의 총 gain을 값으로 한다.
metric (***)
- 학습 목적에 따라 metric을 잘 설정해야 한다.
- binary cross entropy
- multiclass cross entropy
- regression L2 : mse
- regression L1 : mae
- mape
- poisson (log trasnformation)
- quantile
- huber ( huber loss, mae approx )
- fair ( fair loss, mae approx )
- gamma ( residual deviance )
- lambdarank
- tweedie
early_stopping_round / early_stopping_rounds (**)
- validation으로 평가하여 발전이 없는 것이 얼마나 반복되었을 때 모델 적합을 중단할지를 설정.
- validation 데이터가 있어야 한다.
enable_bundle / enable_feature_grouping (*)
- 피처 번들링에 대한 여부. 보통은 라벨인코딩을 직접해주고 피처 번들링 기능을 끄는것이 희한한 결과를 보지 않는 방법 중 하나다.
더 빠른 속도를 위하여 :¶
- bagging_fraction/subsample 과 baggin_freq/subsample_freq 을 설정하여 bagging 을 적용하십시오
- feature_fraction/ colsample_bytree 을 설정하여 feature sub-sampling을 하십시오
- 작은 max_bin 값을 사용하십시오
- save_binary 를 값을 통해 다가오는 학습에서 데이터 로딩 속도를 줄이십시오
- parallel learning/n_jobs 병렬 학습을 적용하십시오
더 나은 정확도를 위해 :¶
- 큰 max_bin 값을 사용하십시오 (아마 속도는 느려질 수 있습니다)
- 작은 learning_rate 값을 큰 num_iterations 값과 함께 사용하십시오
- 큰 num_leaves 값을 사용하십시오 (아마 과적합을 유발할 수도 있습니다)
- 더 큰 트레이닝 데이터를 사용하십시오
- dart 를 사용하십시오
- 범주형 feature를 사용하십시오
과적합을 해결하기 위해 :¶
- 작은 max_bin 값을 사용하십시오
- 작은 num_leaves 값을 사용하십시오
- min_data_in_leaf/min_child_samples 와 min_sum_hessian_in_leaf/min_child_weight 파라미터를 사용하십시오
- bagging_fraction/sumbsample 과 bagging_freq/subsample_freq 을 사용하여 bagging 을 적용하십시오
- feature_fraction/colsample_byree 을 세팅하여 feature sub-sampling을 하십시오
- lambda_l1/reg_alpha, lambda_l2/reg_lambda 그리고 min_gain_to_split 파라미터를 이용해 regularization (정규화) 를 적용하십시오
- max_depth 를 설정해 Deep Tree 가 만들어지는 것을 방지하십시오
'공부 > SSACxAIFFEL' 카테고리의 다른 글
Semantic Segmentation : Focal Loss (0) | 2021.06.23 |
---|---|
Semantic Segmentation : DICE LOSS (0) | 2021.06.21 |
SSACxAIFFEL 10주차: 21'03.08. ~ 03.12; 전이학습, keras (2) | 2021.03.12 |
SSACxAIFFEL 5주차 : 21' 02.01 ~ 02.05 (0) | 2021.02.05 |
SSACxAIFFEL 4주차 : 21' 01.25 ~ 01.29 (0) | 2021.01.31 |