본문 바로가기
Machine Learning/XGBoost

XGBoost 파라미터 조정(튜닝)

by 찐남 2021. 9. 1.
파라미터 조정은 기계 학습에서 쉽지 않은 영역이며, 모델의 최적 파라미터는 여러 시나리오에 따라 달라질 수 있습니다. 따라서 이를 위한 정형화되어 있는 포괄적인 가이드를 만드는 것은 사실상 불가능합니다. 이번 포스팅에서는 XGBoost 파라미터에 대한 몇 가지 지침을 제공하려고 합니다. 본 포스팅은 XGBoos의 홈페이지에 있는 내용을 기반으로 작성하였습니다.

편향-분산 트레이드오프에 대한 이해


머신 러닝이나 통계 수업을 수강한다면 반드시 이해하셔야 할 가장 중요한 개념 중 하나입니다. 기계학습에서의 파라미터 조정은 편향-분산의 트레이드오프라고 말할 수 있습니다. 모델이 더 복잡해지도록 허용하면(예: 더 깊이) 모델이 훈련 데이터를 더 잘 맞출 수 있어 편향된 모델이 덜 생깁니다. 그러나 이러한 복잡한 모델에는 더 많은 데이터가 필요합니다.

XGBoost의 대부분의 파라미터 조정은 결국 편향-분산 트레이드오프에 관한 것입니다. 최고의 모델은 모델 복잡성과 예측력을 신중하게 트레이드오프해야 합니다.




과적합 제어


트레이닝 데이터의 정확도는 높지만 테스트 데이터에 대한 정확도가 낮으면 과적합 문제가 발생했을 가능성이 큽니다. 일반적으로 XGBoost에서 과적합을 제어할 수 있는 두 가지 방법이 있습니다.

  1. 모델의 복잡성을 직접 제어하는 것입니다. 이러한 방법에는 max_depth, min_child_weight 및 gamma가 포함됩니다.
  2. 무작위성을 추가하여 노이즈에 강인한 훈련을 만드는 것입니다. - subsample 및 colsample_bytree가 포함됩니다.  - 학습률의 크기 eta를 줄일 수도 있습니다 (단, num_round를 늘리는 것을 잊지 마세요!)

* max_depth [default=6]
나무의 최대 깊이. 이 값을 늘리면 모델이 더 복잡해지고 과적합될 가능성이 높아집니다. 0은 tree_method가 hist 또는 gpu_hist로 설정되고 깊이에 제한이 없음을 나타내는 경우에만 lossguide 성장 정책에서 허용됩니다. 딥 트리를 훈련할 때 XGBoost가 메모리를 적극적으로 소비한다는 점에 조심하세요. 옵션 설정이 가능한 범위: [0,∞] (0은 tree_method가 hist 또는 gpu_hist로 설정된 경우에만 lossguide 성장 정책에서 허용됨)

* min_child_weight [default=1]
child node에 필요한 인스턴스 가중치(헤시안)의 최소 합계입니다. 트리 분할 단계에서 인스턴스 가중치 합계가 min_child_weight보다 작은 리프 노드가 생성되면 빌드 프로세스에서 추가 분할을 포기합니다. 선형 회귀 작업에서 이것은 단순히 각 노드에 있어야 하는 최소 인스턴스 수에 해당합니다. min_child_weight가 클수록 알고리즘이 더 보수적이고, 편향성이 증가하는 대신, 변동성은 작아집니다(편향-분산 트레이드오프).

* gamma [default=0, alias: min_split_loss]
트리의 리프 노드에서 추가 파티션을 만드는 데 필요한 최소 손실 감소입니다. 감마가 클수록 알고리즘이 더 보수적입니다. 범위는 [0,∞]입니다.

* subsample [default=1]
훈련 인스턴스의 하위 샘플 비율입니다. 0.5로 설정하면 XGBoost가 나무를 성장시키기 전에 훈련 데이터의 절반을 무작위로 샘플링합니다. 그리고 이것은 과적합을 방지할 것입니다. 서브 샘플링은 모든 부스팅 반복에서 한 번 발생합니다. 범위는 (0,1]입니다.

* colsample_bytree [default=1]
colsample_bytree는 각 트리를 구성할 때 열의 하위 샘플 비율입니다. 서브 샘플링은 구성된 모든 트리에 대해 한 번 발생합니다.

* eta [default=0.3, alias: learning_rate]
과적합을 방지하기 위해 업데이트에 사용되는 단계 크기 축소입니다. 각 부스팅 단계 후에 새로운 feature의 가중치를 직접 얻을 수 있으며 eta는 feature 가중치를 축소하여 부스팅 프로세스를 보다 보수적으로 만듭니다.

* num_round
부스팅을 위한 반복 학습 수





더 빠른 훈련 성능


tree_method라는 파라미터가 있는데 더 빠른 계산을 위해 hist 또는 gpu_hist로 설정할 수 있습니다.

불균형 데이터 세트 처리


광고 클릭률 로그와 같은 일반적인 경우 데이터 세트의 불균형이 매우 큽니다. 이는 XGBoost 모델의 학습에 영향을 줄 수 있으며, 이를 개선하는 두 가지 방법이 있습니다.

1. 예측의 성과측정 지표(KS, AUC, GINI 등)에만 관심이 있는 경우

- scale_pos_weight를 통해 양수 및 음수 가중치 균형 조정 - 모형 평가를 위해 AUC 사용

2. 올바른 확률을 예측하는 것이 중요하다면

- 이러한 경우 데이터 세트의 균형을 다시 조정할 수 없습니다.
-수렴을 돕기 위해 매개변수 max_delta_step을 유한 숫자(예: 1)로 설정합니다.





반응형

댓글