본문 바로가기

Data Science : Study/1. Python

모델 : LightGBM

반응형

 

 

 

Light Gradient Boosting Machine (LightGBM)

 

1. 특징

  • 머신러닝 부스팅 알고리즘 중 하나로, 가중치를 경사하강법으로 진행한다.
    ※ 머신러닝 부스팅 알고리즘: 앙상블 부스팅 기법으로, 틀린 부분에 가중치를 더하면서 진행하는 알고리즘.
       machine learning ensemble, ensemble boosting 등이 있다.
    ※ 경사하강법: 1차 근삿값 발견용 최적화 알고리즘. 기본 개념은 함수의 기울기(경사)를 구하고, 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복시킨다.
  • leaf wise 트리분할
    트리의 균형을 맞추지 않고 특정 리프 노드를 지속적으로 분할하여, 깊이가 늘어난 트리 생성.
    어떤 리프 노드를 분할할까? max delta loss 값을 갖는 리프 노드!
    → 동일한 leaf 생성 시 손실을 줄일 수 있다.
    ※ level wise 트리분할: 균형있게 트리를 분할. 모든 leaf 를 분할하는 것.
  • xgboost의 단점을 보완: 학습시간이 빠르다. 하이퍼 파라미터가 적다.

 

 

2. 장점

  • 대용량 데이터 처리가 가능
  • 다른 모델들보다 더 적은 자원을 사용
  • 빠름
  • GPU 지원

 

 

3. 단점

너무 적은 수의 데이터를 사용하면 과적합 발생

→ 데이터의 개수(행의 수)가 10,000개 이상일 때 사용할 것을 추천

 

 

4. 파이썬에서 사용하기 (anaconda 사용)

 

▶ 설치

!conda install -c conda-forge -y lightgbm

 

▶ 모델 생성

n_estimators 반복하려는 트리의 개수: 반복을 통해 더 좋은 모델을 찾아낸다
기본값은 100으로, 보통 1000 정도 해주면 좋다.
너무 크게 설정하는 경우 과적합이 발생할 수 있다.
boosting 부스팅 방법.
기본은 gbdt, 정확도가 중요할 때는 dart, 샘플링을 이용할 때는 goss.
- gbdt : traditional Gradient Boosting decision tree
- rt : random forest
- dart : dropouts meet multiple additive regression tree
- goss : gradient-based one-side sampling
learning_rate 학습률.
각 예측기마다 얼마나 가중치를 주어 학습할 것인지.
일반적으로 0.01 ~ 0.1 정도로 맞추고, 다른 파라미터를 튜닝한다.
max_depth 트리의 최대 길이.
feature가 많다면 크게 설정하는 것이 좋다. -1로 설정하면 제한 없이 분기한다.
min_child_samples 리프 노드가 되기 위한 최소한의 샘플 데이터 수.
과적합 방지를 위해 잘 설정해야 한다.
num_leaves 하나의 트리가 가질 수 있는 최대 리프 개수.
모델 복잡성에 영향을 주는 주 요인. = 2^(max_depth)
bagging_fraction bagging에 사용할 데이터의 비율.
다양성을 높이는 방법으로, boosting을 goss로 하면 해당 파라미터 사용 시 에러.
0 < fraction <= 1. 절대 0 안됨!
feature_fraction 트리를 학습할 때마다 선택하는 feature의 비율.
boosting이 rf일 때, rf는 feature의 일부만을 선택하여 훈련하는데, 이를 통제한다.
과적합 방지. 학습속도 향상.
1보다 작다면 매 iteration(tree)마다 다른 feature를 랜덤추출하여 학습한다.
(0.8 → feature의 80%만 랜덤선택)
early_stopping_round validation set에서 평가지표가 n round동안 더 이상 향상되지 않으면 학습을 정지한다.
reg_lambda L2 regularization
reg_alpha L1 regularization.
정규화를 통해 과적합을 방지할 수 있지만, 정확도를 저하시킬 수도 있기 때문에 일반적으로 lambda, alpha 두 값 모두 기본값인 0으로 둔다.
min_data_in_leaf 한 리프 노드에 들어갈 수 있는 데이터의 개수.
max_bin 최대 bin (히스토그램의 bin 개수).
많이 주면 느려지지만 조금 더 이상적인 트리 분기를 찾는다. 기본값은 255.

 

원하는 목표에 따른 파라미터 설정

  • 더 빠른 속도
    - bagging_fraction
    - max_bin을 작게
    - save_binary 사용
    - parallel learning
  • 더 높은 정확도
    - boosting: dart
    - num_iteration을 크게
    - learning_rate를 작게
    - num_leaves를 크게: 과적합 발생할 수 있음
    - max_bin을 크게
  • 과적합 방지
    - max_bin을 작게
    - num_leaves를 작게
    - min_data_in_leaf 사용

 

 

 

 

 

반응형