lightgbm tuning 가이드

KIDA·2022년 9월 4일
0

해당 가이드는 하단 링크의 글 중 필요한 부분만 정리한 것으로 boosting tuning에 관심이 있으시면 둘 다 읽어보시길 추천드립니다.

1. (경험적으로) 하이퍼파라미터 튜닝보다는 파생변수 생성이 성능을 높이는데 효과적이다.

2. DART, GOSS

  • DART(Dropout Additive Regression Trees)는 신경망의 드롭 아웃을 적용시킨 방법으로 트리를 완전히 누락시켜 과적합을 제어하고, GOSS(Gradient-based One-Side Sampling)는 SGD를 더 빠르게 잘 수렴시키기 위해 서브샘플링을 이용하는 방법으로 두 기법에 대해서 알고 있을 때 사용을 추천한다.

3. tree Building Method

  • 트리를 만드는 방법을 설정하는 파라미터로 xgboost에만 존재하며 모델성능과 학습시간에 영향을 준다. 정확한 학습을 위해서는 'exact'(exact method), 학습 속도를 높이기 위해서는 'approx', 'hist', 'gpu_hist'(approximate method)를 이용한다.

4. early_stopping

  • train 데이터 전체를 사용하여 최종모형을 학습할때에는 cv를 early stopping과 함께 수행하여 각 fold별 iteration 수를 구한 후 그 평균값에 10%정도 더 큰 값을 사용하는 것이 좋다.

5. maximum depth

  • 각 트리의 최대 깊이로 maximum leaves, 모형 성능, 학습 시간에 영향을 준다. gradient boosting에 가장 민감한 하이퍼파라미터로 먼저 튜닝한다.
  • lightgbm과 같이 leaf-wise로 학습하는 경우에는 max_depth를 -1로 설정하는 것이 효과적이고 xgboost의 경우 max_depth에 따른 성능 차이가 존재한다.
  • maximum leaves = 2^depth - 1

6. maximum leaves

  • maximum depth와 같이 튜닝해야 하는 하이퍼파라미터이다.
  • maximum depth를 크게 설정했을 때 maximum leaves를 조절하면 규제로 작용하여 트리가 너무 거대해지는 것을 막을 수 있다. (예를 들어 max_depth=7일 때 num_leaves가 127인 것은 overfitting을 야기하므로 70, 80 등 작게 사용하는것이 좋다.)

7. row sampling / col sampling

  • 각 iteration에 사용되는 row, column의 비율로 보통 0.7 정도의 값을 사용하고 너무 세세하게 튜닝할 필요는 없다.

8. 변수의 타입

  • 변수의 cardinality(#categories)가 높을 경우 해당 변수를 category가 아닌 numeric 변수로 처리하는 것이 효과적일 수도 있다.
  • category가 3만개가 넘었음에도 numeric으로 처리 할 경우 정보 손실이 있었다. 둘을 비교해보자.

9. Accuracy를 높이기 위한 방법

  • large max_bin (may be slower)
  • small learning_rate with large num_iterations
  • large num_leaves (may cause overfitting)
  • try dart

10. Over-fitting을 방지하기 위한 방법

  • small max_bin, num_leaves
  • faeture sub_sampling by set feature_fraction
  • regularization lambda_l1, lambda_l2

XGBoost와 LightGBM 하이퍼파라미터 튜닝 가이드
LightGBM Parameters tuning

profile
까먹지 않기 위한 노트 (ว˙∇˙)ง

0개의 댓글