[파이썬] xgboost 조기 종료를 사용한 최적의 트리 개수 찾기

xgboost는 그래디언트 부스팅 트리 알고리즘을 사용하여 뛰어난 예측 성능을 제공하는 머신러닝 라이브러리입니다. 그러나 xgboost 모델의 트리 개수를 어떻게 결정해야 하는지에 대한 고민이 있을 수 있습니다. 과적합을 방지하기 위해 모델을 너무 많이 학습시키는 것은 시간과 자원의 낭비일 수 있습니다. 이러한 문제를 해결하기 위해 조기 종료(Early Stopping)를 사용하여 최적의 트리 개수를 찾을 수 있습니다.

조기 종료는 학습 중에 모델의 성능이 개선되지 않을 때 학습을 일찍 종료하는 기법입니다. 이 기법을 사용하면 불필요한 반복 학습을 줄일 수 있으며, 최적의 트리 개수를 알 수 있게 됩니다.

Python에서 xgboost를 사용하여 조기 종료를 적용하는 방법을 알아보겠습니다. 예제로는 유방암 데이터셋을 사용하겠습니다.

데이터 준비 및 전처리

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

data = load_breast_cancer()
X = data.data
y = data.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

모델 학습 및 조기 종료 적용

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

params = {
    'objective': 'binary:logistic',
    'eval_metric': 'logloss',
}

watchlist = [(dtrain, 'train'), (dtest, 'eval')]

model = xgb.train(params, dtrain, num_boost_round=1000, evals=watchlist, early_stopping_rounds=10)

위 예제 코드에서는 xgb.train() 함수의 early_stopping_rounds 매개변수를 사용하여 조기 종료를 적용하고 있습니다. 이 값은 성능 향상이 없을 때 학습을 종료하기 전에 얼마나 많은 반복을 기다릴지를 결정합니다. 위 예제에서는 10 이전에 성능이 향상되지 않으면 학습을 종료합니다.

조기 종료가 적용된 후, 모델의 최적 트리 개수를 확인하기 위해 xgb.best_iteration 속성을 사용할 수 있습니다.

best_iteration = model.best_iteration
print(f"The optimal number of trees is {best_iteration}")

결과 분석

조기 종료 후 최적의 트리 개수를 확인하면 모델이 어느 시점에서 수렴하는지 알 수 있습니다. 이를 통해 학습 시간을 단축하고 불필요한 계산을 피할 수 있습니다.

결론

xgboost를 사용하여 조기 종료를 적용하여 최적의 트리 개수를 찾는 방법에 대해 알아보았습니다. 조기 종료를 사용하면 모델의 학습 시간을 단축하고 최적의 트리 개수를 찾을 수 있습니다.