LightGBM을 돌리면서 GridSearch를 해보려하니 파라미터를 어떻게 조율해야 할지 감이 안 잡혀서
자료를 뒤지다가 LightGBM 홈페이지에서 제공하는 파라미터 튜닝 가이드를 발견했습니다!
가이드의 내용을 정리하면서 어떻게 하면 LightGBM을 효과적으로 사용할 수 있을지 알아보겠습니다.
LightGBM 핵심 파라미터
LGBM은 leaf-wise tree growth 알고리즘이기 때문에 얼마나 깊이, 얼마 만큼의 leaf 를 형성하도록 조율하느냐가 매우 중요합니다. 아래 파라미터들은 leaf와 직접적으로 연관된 핵심 파라미터로 볼 수 있습니다.
num_leaves
이는 트리당 최대 leaf(자식노드)의 개수를 의마합니다. 이론적으로는 num_leaves = 2^(max_depth)로 설정하면 depth-wise tree와 동일한 개수의 leaf를 가진 트리를 만들 수 있습니다. 하지만 일반적으로 leaf 중심 트리가 깊이 중심 트리보다 깊기 때문에 2^max_depth보다 작은 정도의 num_leaves를 설정하는게 바람직하다고 합니다.
min_data_in_leaf
말 그대로 leaf에 있는 데이터의 최소양을 설정하는 매우 중요한 파라미터입니다. 이는 훈련 샘플의 크기와 num_leaves에 의해 영향을 받는데요. 하나의 leaf에 넣는 데이터 양을 많이 설정한다면 트리의 깊이가 얕아져서 오버피팅을 방지하게 됩니다. 하지만 너무 큰 값을 설정하면 얕은 언더피팅이 되기 때문에 주의해야 합니다. (여기서 데이터의 양은 사용하는 데이터 = 관측치의 개수를 의미합니다)
max_depth
가장 직관적인 파라미터로 트리의 최대 깊이를 제한시켜 주는 역할을 합니다.
더 얕은 트리 생성 방법 (학습시간 단축)
- Max_depth 줄이기
- num_leaves 줄이기
- min_gain_to_split 늘리기 (defualt:0)
- min_data_in_leaf 늘리기
- min_sum_hessian_in_leaf 늘리기
min_gain_to_split은 트리가 퍼져나갈때 디폴트로 0.0의 gain(가지치기를 통한 학습 손실의 감소폭)이 있으면 트리가 뻗어나가지 않게 되는데, 만약 이를 높여주면 조금 더 일찍 가지치기를 중단시킬 수 있습니다.
min_data_in_leaf와 min_sum_hessian_in_leaf는 유사한 개념으로 , 하나의 노드에 들어가야 하는 관측치의 개수를 조절하는 역할을 합니다.
*여기서 주의할 점은 max_depth와 num_leaves의 관계를 잘 고려해야 한다는 점입니다. max_depth만 얕게 설정을 하고 num_leaves가 크다면 문제가 발생할 수 있습니다.
트리 개수 최소화 방법 (학습시간 단축)
앞에는 트리의 깊이, 자식 노드의 개수를 제한하는 방법이었다면 이번에는 트리 자체의 개수와 관련된 내용입니다.
- num_iterations 줄이기 **
- Early stopping 사용하기
**num_iterations을 줄인다면 learning rate도 함께 감소시켜야 학습의 정확도가 높아집니다
이 외에도 자세한 설명이 있지만, 모델링을 할때 좀 더 직관적으로 사용할 수 있도록 요약된 버전을 공유드립니다.
높은 정확도를 원할 때
- max_bin 넓히기
- learning_rate는 작게, num_iterations는 크게
- num_leaves를 크게 잡기 (오버피팅 발생 가능)
- 큰 훈련데이터 쓰기
오버피팅 대응 방법
- max_bin 줄이기
- num_leaves 줄이기
- min_data_in_leaf 와 min_sum_hessian_in_leaf 활용하기
- bagging_fraction과 bagging_freq를 활용한 배깅 실행하기
- feature_fraction 을 활용한 피처 서브 샘플링하기
- 큰 훈련데이터 사용
- lambda_l1, lambda_l2, min_gain_to_split 으로 규제 적용하기
- max_depth 조율
- path_smooth 늘리기
Source:
https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html
'Data Science > Machine Learning' 카테고리의 다른 글
구글 Colab 여러 데이터프레임 한번에 보는 법 (0) | 2022.11.24 |
---|---|
데이터프레임 결측값 쉽게 보는 법 총정리 (0) | 2022.11.21 |
StackingCVRegressor 개념 및 활용방법 정리 (0) | 2022.10.31 |
ColumnTransformer 피처 이름 데이터프레임 전달 방법 (0) | 2022.10.28 |
회귀 평가 지표 개념 A-Z 및 활용방법 이해하기 (0) | 2022.10.19 |
댓글