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

LightGBM은 경사 부스팅 기반의 머신 러닝 알고리즘으로, 대용량의 데이터셋에서 빠른 학습과 예측을 제공하는 강력한 도구입니다. LightGBM은 기본적으로 트리 기반의 모델을 사용하여 예측을 수행하는데, 이때 트리의 개수는 모델의 성능에 영향을 미치는 중요한 하이퍼파라미터입니다.

트리의 개수를 정하는 것은 일반적으로 검증 데이터를 사용하여 결과를 평가하고 비교하는데, 이때 조기 종료(early stopping) 기법을 사용하면 더욱 효과적으로 최적의 트리 개수를 찾을 수 있습니다. 조기 종료는 모델이 과적합되기 전에 학습을 중단하는 방법으로, 검증 데이터의 손실(loss)가 더 이상 개선되지 않을 때 학습을 멈춥니다.

Python에서 LightGBM을 사용하여 조기 종료를 사용하여 최적의 트리 개수를 찾는 방법에 대해 알아보겠습니다.

1. 데이터 준비

마치고자 하는 작업에 맞는 데이터를 준비합니다. 이 예시에서는 분류 모델을 학습하는 것을 가정하고, 입력 데이터와 레이블을 준비합니다.

import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer

# 유방암 데이터셋 로드
data = load_breast_cancer()
X = data.data
y = data.target

# 학습 데이터와 검증 데이터로 분할
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)

2. LightGBM 모델 생성 및 학습

LightGBM에서 사용할 모델과 학습에 필요한 파라미터를 설정합니다.

params = {
    'objective': 'binary',
    'metric': 'binary_logloss',
    'boosting_type': 'gbdt',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8
}

train_data = lgb.Dataset(X_train, label=y_train)
valid_data = lgb.Dataset(X_valid, label=y_valid)

# LightGBM 모델 학습
model = lgb.train(params, train_data, valid_sets=[train_data, valid_data], verbose_eval=100,
                  early_stopping_rounds=50)

params는 LightGBM 모델의 하이퍼파라미터를 설정하는 딕셔너리입니다. num_leaves, learning_rate, feature_fraction, bagging_fraction 등의 파라미터들을 조정하여 모델의 성능을 향상시킬 수 있습니다.

train_datavalid_data는 LightGBM에서 사용하는 데이터 형식으로 변환한 학습 데이터와 검증 데이터입니다.

lgb.train() 함수를 사용하여 모델을 학습시킬 수 있습니다. valid_sets 파라미터에 학습 데이터와 검증 데이터를 전달하여 조기 종료를 사용할 수 있습니다. verbose_eval 파라미터는 학습 과정에서 로그를 출력할 빈도를 설정하는 것이며, early_stopping_rounds 파라미터는 조기 종료를 수행하기 전에 대기할 트리의 개수를 지정합니다.

3. 최적의 트리 개수 확인

모델 학습이 완료된 후 최적의 트리 개수를 확인할 수 있습니다.

best_iteration = model.best_iteration
print(f"Best iteration: {best_iteration}")

model.best_iteration은 최적의 트리 개수를 반환합니다.

위의 과정을 통해 LightGBM에서 조기 종료를 사용하여 최적의 트리 개수를 찾을 수 있습니다. 조기 종료를 사용하면 불필요한 학습을 줄이고, 더 효율적인 모델을 학습할 수 있습니다.