본문 바로가기
Data Science/Machine Learning

LightGBM 파라미터 튜닝 가이드 정리

by Queen2 2022. 10. 31.
728x90
반응형

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

728x90
반응형

댓글