LightGBM은 gradient boosting 알고리즘을 기반으로 한 빠른 속도를 가진 기계 학습 모델입니다. 그러나 모델이 과적합되는 경향이 있을 수 있으며, 이를 방지하기 위해 정규화 기법을 적용할 수 있습니다. 이 글에서는 LightGBM 모델의 정규화 방법에 대해 알아보겠습니다.
1. 데이터 세트 나누기
모델 정규화를 위해 가장 먼저 해야 할 일은 데이터를 학습, 검증 및 테스트 세트로 나누는 것입니다. 데이터를 학습 세트로 사용하여 모델을 학습하고, 검증 세트로 모델의 성능을 평가하며, 마지막으로 테스트 세트로 모델의 일반화 성능을 확인합니다.
import lightgbm as lgb
from sklearn.model_selection import train_test_split
# 데이터를 학습, 검증 및 테스트 세트로 나누기
train_data, val_data, test_data = train_test_split(X, y, test_size=0.2, random_state=42)
# 학습 및 검증 데이터를 LightGBM의 데이터 세트로 변환
lgb_train = lgb.Dataset(train_data, label=train_labels)
lgb_val = lgb.Dataset(val_data, label=val_labels, reference=lgb_train)
2. 하이퍼파라미터 설정
모델을 생성할 때, LightGBM의 하이퍼파라미터를 설정해야 합니다. 하이퍼파라미터는 모델의 학습 방식, 트리의 깊이 및 수, 학습 속도 등을 결정하는 매개 변수입니다. 이 중에서도 모델 정규화와 관련된 하이퍼파라미터는 다음과 같습니다.
- max_depth: 트리의 최대 깊이를 제한하여 모델의 과적합을 방지합니다. 일반적으로 작은 값을 설정하면 과적합 위험을 줄일 수 있습니다.
- min_child_samples: 리프 노드에 필요한 최소한의 샘플 수입니다. 작은 값으로 설정하면 모델의 복잡도를 줄여 과적합을 방지할 수 있습니다.
# 하이퍼파라미터 설정
params = {
'max_depth': 5,
'min_child_samples': 10
}
3. 모델 학습
이제 데이터와 하이퍼파라미터가 준비되었으므로, LightGBM 모델을 학습할 차례입니다. lgb.train()
함수를 사용하여 모델을 학습하고, 검증 데이터로 성능을 모니터링할 수 있습니다.
# 모델 학습
model = lgb.train(
params,
lgb_train,
valid_sets=[lgb_train, lgb_val],
num_boost_round=1000,
early_stopping_rounds=100
)
4. 모델 평가
학습된 모델의 성능을 평가하기 위해 검증 데이터로 정확도나 다른 평가 지표를 계산할 수 있습니다. 이를 통해 모델의 일반화 성능을 확인하고 정규화를 통해 얻은 성능 개선을 파악할 수 있습니다.
# 검증 데이터에 대한 예측
val_predictions = model.predict(val_data)
# 예측값을 라벨로 변환
val_predictions = [0 if x < 0.5 else 1 for x in val_predictions]
# 검증 데이터의 정확도 계산
accuracy = (val_predictions == val_labels).mean()
5. 모델 예측
모델 학습과 평가가 완료되었으면, 실제 데이터에 대한 예측을 수행할 수 있습니다. model.predict()
함수를 사용하여 테스트 데이터에 대한 예측값을 얻을 수 있습니다.
# 테스트 데이터에 대한 예측
test_predictions = model.predict(test_data)
# 예측값을 라벨로 변환
test_predictions = [0 if x < 0.5 else 1 for x in test_predictions]
위에서 설명한 LightGBM 모델의 정규화 방법을 사용하여 모델의 성능을 높이고, 과적합을 피할 수 있습니다. 적절한 하이퍼파라미터 설정과 데이터 세트의 나누기는 모델의 정확도와 일반화 능력에 큰 영향을 미치기 때문에 주의해야 합니다.