해당 가이드는 하단 링크의 글 중 필요한 부분만 정리한 것으로 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