Machine Learning/Supervised Learning

[Supervised Learning][Ensemble][Boosting] LGBM (Light Gradient Boosting Machine)

데이터 세상 2022. 10. 11. 15:35

LGBM (Light Gradient Boosting Machine)

Light는 "가볍다"라는 의미로 빠른 속도를 나타낸다는 장점이 있다

트리 기반의 학습 알고리즘인 gradient boosting 방식의 프레임워크

performance 및 scalability를 목적으로 마이크로소프트사에서 개발

다른 tree 알고리즘이 tree을 수평으로 확장(level-wise)하는 반면 LGBM은 tree를 수직으로 확장(leaf-wise)

 

Level-wise tree growth (수평 확장, 균형 트리분할)

최대한 균형 잡힌 트리를 유지하며 분할하여 트리의 깊이를 최소화하여 overfitting에 강한 구조이지만 균형을 맞추기 위한 시간 필요

 

Leaf-wise tree growth (수직 확장, 리프중심 트리분할)

최대 손실 값을 가지는 리프노드를 지속적으로 분할하면서 트리가 깊어지고 비대칭적으로 생성하며 이로써 예측 오류 손실을 최소화

즉, 트리의 어느 레벨에서 모든 노드를 확장시키는 것이 아닌 최종 노드 하나만 분할하는 방식을 사용

loss가 가장 큰 부분을 쪼개고 쪼개서 결국 최대한으로 줄여지는 것이 가능

다른 노드들을 분할시키지 않고 오로지 residual이 큰 노드만 쪼개다보니 메모리의 절약과 속도를 향상시킬 수 있다

  • delta loss가 증가하도록 leaf 개수를 정함 -> 동일한 leaf 확장 시 level-wise보다 손실을 줄일 수 있다
  • 다른 level-wise 알고리즘 보다 낮은 loss를 달성하는 경향이 있음 -> 높은 정확도를 나타낼 수 있음
  • 데이터의 크기가 작은 경우 overfitting(특정한 데이터에서만 높은 정확도를 나타냄) 되기 쉬우므로 max_depth를 줄여줘야 함

 

LGBM Hyper-parameters

learning_rate

일반적으로 0.01 ~ 0.1로 고정 후 다른 파라미터를 튜닝하고 나중에 성능을 높일 때 줄임

 

num_iterations

default 100

1000정도가 적당하지만, 너무 크게하면 overfitting이 발생할 수 있다

 

max_depth

-1로 설정하면 제한없이 분기

feature에 비례하게 설정

 

boosting

부스팅 방법: 기본값은 gbdt이며 정확도가 중요할 때는 drop-out과 같은 dart나 샘플링을 이용하는 goss를 사용

  • gbdt: traditional Gradient Boosting Decision Tree
  • rf: Random Forest
  • drat: Dropouts meet Multiple Additive Regression Trees
  • goss: Gradient-based One-side Sampling

 

bagging_fraction

배깅을 하기 위해 데이터를 랜덤 샘플링하여 학슴에 사용

0 < fraction ≤ 1값 사용

 

feature_fraction

feature_fraction이 1보다 작다면 LGBM은 매 iteration(tree)마다 다른 feature를 랜덤하게 추출하여 학습

만약 0.8로 값을 설정하고 tree를 구성할 때, feature의 80%만 랜덤하게 선택

overfitting을 방지하기 위해 설정할 수 있으며, 학습속도가 향상된다.

 

scale_pos_weight

클래스 불균형의 데이터 셋에서 weight를 주는 방식으로 positive를 증가시킨다.

기본값은 1이며, 불균형 정도에 따라 조절한다

 

early_stopping_round

validation 셋에서 평가지표가 더이상 향상되지 않으면 학습을 정지한다.

평가지표 향상이 n 라운드 이상 향상되지 않으면 학습을 정지한다.

 

lambda_l1, lambda_l2

정규화를 통해 overfitting을 방지할 수 있지만, 정확도를 저하시킬수도 있기 때문에, 일반적으로 default값인 0으로 둔다.

 

 

더 빠른 속도

  • bagging_fracion 
  • max_bin은 작게
  • save_binary를 쓰면 데이터 로딩 속도가 빨라짐
  • parallel learning 사용

 

더 높은 정확도

  • max_bin을 크게
  • num_iterations는 크게하고 learning_rate는 작게
  • num_leaves를 크게 (overfitting의 원인이 될 수 있음)
  • boosting 알고리즘 'dart'를 사용

 

Overfitting 줄이기

  • max_bin 작게
  • num_leaves 작게
  • min_data_in_leaf와 min_sum_hessian_in_leaf 사용하기

 

LGBM 장점과 단점

장점

  • 대용량 데이터를 사용할 수 있다
  • 적은 메모리를 사용 (노드의 개수가 상대적으로 적다)
  • 카테고리형 데이터에 대해서 one-hot encoding 필요없이 알아서 인식
  • GBM보다 속도가 빠르다
  • 결과의 정확도가 상대적으로 높다
  • GPU를 활용할 수 있다

 

단점

  • overfitting에 민감하다
  • loss를 줄이는 것에 집중하다보니 과적합에 민감하여 작은 데이터에 쓰는 것은 적합하지 않다

-> 보통 1만개 이상의 행을 가진 데이터에 사용하는 것을 추천하다.

 

 


References

반응형