LightGBM

wow_kim·2021년 3월 5일
0

ML/DL

목록 보기
2/2
post-thumbnail

GBM : Gradient Boosting Model

트리 기반 Gradient Boosting 방식 알고리즘이 모델 성능의 우수성은 인정되지만 학습 시간이 너무 오래 걸림

  • XGBoost : 모델 성능도 좋고 병렬 학습이 가능, 하지만 대용량 데이터에 대해서 학습 시간이 오래걸림
  • LightGBM : 모델 학습 시간을 대폭 향상 시키기 위해 개발된 방식(마이크로소프트에서 개발!), 랜덤 포레스트보다는 느림ㅎ

학습 시간이 오래걸리면 여러가지 방법을 쓰는 것에 제한이 있음, 캐글같은 데이터경진대회에서 베이스라인으로 많이 쓰임.

LightGBM

  • level-wise 방식은 균형을 맞추며 트리를 생성해나감
  • Leaf-wise 방식(균형을 맞추지 않으며 Tree를 생성해나가는 방식)으로 Tree를 생성하면 빠르게 트리를 생성해갈 수 있음
  • 이러한 방식은 Overfitting되기 쉬움. 하지만 LightGBM은 내부 하이퍼 파라미터 등으로 그 문제를 잘 해결해냄

주요 특징

  1. 히스토그램 기반으로 Feature Binning
  2. GBDT 외에 GOSS, DART 방식 제공
  3. 오버피팅을 극복하기 위한 다양한 하이퍼 파라미터

1. 히스토그램 기반 Feature Binning

Best split gain을 찾기 위해 모든 leaf node의 데이터들을 대상으로 해야함. 오랜 수행 시간 필요
-> lightGBM : 연속형 feature들을 특정한 개수의 bin으로 할당하여 개별 피처들의 범위를 급격히 줄임!

2. Boosting Type

  • default : gbdt(gradient boosting descision tree)
  • goss, dart, rf(랜덤포레스트, 배깅(부스팅X))

2.1 Goss(Gradient Based One-side Sampling)

  • Gradient 값이 상대적으로 큰 값에 대해서만 선택적으로 필터링하여 반복적으로 재 학습
  • Gradient 값이 작을 경우 이미 상당한 수준으로 학습이 진행되었다고 가정함.

2.2 Dart(Dropout meet Multiple Additive Regressing Trees)

  • Iteration을 지속적으로 수행하면서 추가적인 트리가 만들어 질 때 마지막에 만들어 지는 트리들이 일부 데이터 세트 조건만을 만족시키기 위해 만들어지는 경우가 발생. 이런 Tree들에 Drop out 적용

3. 하이퍼 파라미터

LightGBM : leaf-wise 방식이므로 조절해주지 않으면 depth가 끝없이 깊어져서 오버피팅에 취약해짐.

  • 가장 중요한 파라미터
    max_depth : 최대 depth
    num_leaves : leaf node의 개수
    num_iterations(n_estimators) : 약한 학습기의 개수
    learning_rate : 학습률

  • 과적합 제어
    bagging_fraction(subsample) : 데이터를 샘플링하는 비율(행)
    feature_fraction(colsample_bytree) : 트리 생성에 사용하는 피처(열)
    lambda_l2 : L2 Regularization
    lambda_l1 : L1 Regularization
    max_bin : 연속형 변수들 binning할 때 최대 bin의 개수

하이퍼 파라미터 튜닝

  1. Grid Search
  2. Random Search
  3. Bayesian Optimization
  4. 수동 튜닝

Issue

너무 많은 하이퍼 파라미터
gridsearch : 개별 하이퍼 파라미터들을 grid 형태로 지정하는 것은 한계가 존재(데이터가 크면 답이 없다).

Bayesian Opt.

미지의 함수가 반환하는 값의 최대값을 매우 짧은 반복을 통해 찾아내는 최적화 방식!

  • Gaussian Process를 통해 함수의 사후 분포를 생성하고, 이를 기반으로 최적화하려는 함수를 재구성

  • 점차 많은 입력 값을 받아서 수행하면서 사후 분포가 점점 개선되고, 함수 반환 값을 최대되는 입력 파라미터 영역을 보다 확실하게 찾게 됨.

    함수 입력 인자의 범위를 설정 & 함수 선언
    함수를 잘 선언하는 것이 중요(loss function이 return 값)

  • AutoML !

profile
def __wow__(?):

0개의 댓글