[파이썬] lightgbm 교차 검증 활용 방법

LightGBM은 인기있는 그래디언트 부스팅 알고리즘 중 하나이며, 효율적인 학습과 예측 속도를 제공합니다. LightGBM을 활용하여 모델을 검증하는 데에는 교차 검증(Cross Validation) 기법을 사용할 수 있습니다. 교차 검증은 데이터를 여러 부분으로 나누어 모델을 학습하고 평가하는 과정으로, 모델의 일반화 성능을 더 정확히 평가하는 데 도움을 줍니다.

이번 블로그 포스트에서는 Python을 사용하여 LightGBM을 교차 검증에 활용하는 방법에 대해 알아보겠습니다.

데이터셋 로딩

먼저, LightGBM을 사용하기 위해 필요한 라이브러리를 로딩합니다.

import lightgbm as lgb
import numpy as np
import pandas as pd
from sklearn.model_selection import KFold

다음으로, 데이터셋을 로딩합니다. 데이터셋은 보통 Pandas의 DataFrame 형태로 제공됩니다. 이 예시에서는 CSV 파일을 로딩하는 예시를 보여드리겠습니다.

data = pd.read_csv('data.csv')

교차 검증 설정

LightGBM 모델을 교차 검증하기 위해 몇 가지 설정을 해야합니다. 교차 검증을 위해 KFold를 사용하여 데이터셋을 나누고, LightGBM의 cv 메서드를 사용하여 교차 검증을 수행합니다. 다음은 교차 검증 설정 예제입니다.

n_splits = 5
kf = KFold(n_splits=n_splits, random_state=42, shuffle=True)

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

results = lgb.cv(params, lgb.Dataset(data.values, label=target.values), num_boost_round=10000, folds=kf.split(data), early_stopping_rounds=100, verbose_eval=50)

위 코드에서 n_splits는 데이터를 몇 개의 부분으로 나눌지를 결정합니다. params는 LightGBM 모델의 하이퍼파라미터를 설정한 딕셔너리입니다. results는 교차 검증 결과를 저장하는 변수입니다.

교차 검증 결과 분석

교차 검증을 수행한 후에는 결과를 분석하여 모델의 성능을 평가할 수 있습니다. 이를 통해 하이퍼파라미터를 조정하거나 모델을 개선할 수 있습니다. 예를 들어, 다음과 같이 교차 검증의 결과를 확인할 수 있습니다.

print('Best iteration:', len(results['binary_logloss-mean']))
print(f'CV Log Loss: {results["binary_logloss-mean"][-1]:.4f} ± {results["binary_logloss-stdv"][-1]:.4f}')

위 코드에서 len(results['binary_logloss-mean'])은 최적의 반복 횟수를 나타내며, results["binary_logloss-mean"][-1]은 마지막 교차 검증의 평균 로그 손실값을 의미합니다.

결론

이렇게 LightGBM을 활용하여 교차 검증을 수행하는 방법에 대해 알아보았습니다. 교차 검증을 통해 모델의 일반화 성능을 더 정확하게 평가하고, 모델의 성능을 개선할 수 있습니다. LightGBM은 데이터를 효율적으로 처리하고 빠른 학습과 예측 속도를 제공하므로, 다양한 머신러닝 문제에 유용한 알고리즘입니다.