LightGBM
- XGBoost와 함께 Boosting 계열 알고리즘에서 가장 각광받고 있음.
- XGBoost는 학습 시간이 오래 걸리는 것이 단점
- LightGBM의 가장 큰 장점: XGBoost보다 학습에 걸리는 시간이 훨씬 적다 + 메모리 사용량이 상대적으로 적다
- 예측 성능은 비슷하면서 기능은 LightGBM이 더 많음.
- LightGBM은 일반 GBM 계열의 트리 분할 방법(보통 Level Wise)과 다르게 리프 중심 트리 분할(Leaf Wise) 방식을 사용함
- Level Wise : 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화 될 수 있음.
- 균형잡힌 트리는 오버피팅에 보다 더 강함
- 균형을 맞추는 시간이 오래 걸림
- Leaf Wise : 트리의 균형을 맞추지 않고, 최대 손실 값(max delta loss)를 가지는 리프 노트를 지속적으로 분할, 트리의 깊이가 깊어지고 비대칭 트리 생성
- 최대 손실값을 가지는 리프 노드를 지속적으로 분할하여 생성된 규칙 트리는 학습을 반복할 수록 예측 오류 손실을 최소화 할 수 있음 (Level Wise보다)
- Level Wise : 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화 될 수 있음.
In [1]:
import lightgbm
print(lightgbm.__version__)
LightGBM 적용 – 위스콘신 Breast Cancer Prediction
In [4]:
# LightGBM의 파이썬 패키지인 lightgbm에서 LGBMClassifier 임포트
from lightgbm import LGBMClassifier
import pandas as pd
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
dataset = load_breast_cancer()
ftr = dataset.data
target = dataset.target
# 전체 데이터 중 80%는 학습용 데이터, 20%는 테스트용 데이터 추출
X_train, X_test, y_train, y_test=train_test_split(ftr, target, test_size=0.2, random_state=156 )
# 앞서 XGBoost와 동일하게 n_estimators는 400 설정.
lgbm_wrapper = LGBMClassifier(n_estimators=400)
# LightGBM도 XGBoost와 동일하게 조기 중단 수행 가능.
evals = [(X_test, y_test)]
lgbm_wrapper.fit(X_train, y_train, early_stopping_rounds=100, eval_metric="logloss",
eval_set=evals, verbose=True)
preds = lgbm_wrapper.predict(X_test)
pred_proba = lgbm_wrapper.predict_proba(X_test)[:, 1]
In [5]:
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.metrics import precision_score, recall_score
from sklearn.metrics import f1_score, roc_auc_score
def get_clf_eval(y_test, pred=None, pred_proba=None):
confusion = confusion_matrix( y_test, pred)
accuracy = accuracy_score(y_test , pred)
precision = precision_score(y_test , pred)
recall = recall_score(y_test , pred)
f1 = f1_score(y_test,pred)
# ROC-AUC 추가
roc_auc = roc_auc_score(y_test, pred_proba)
print('오차 행렬')
print(confusion)
# ROC-AUC print 추가
print('정확도: {0:.4f}, 정밀도: {1:.4f}, 재현율: {2:.4f},\
F1: {3:.4f}, AUC:{4:.4f}'.format(accuracy, precision, recall, f1, roc_auc))
In [6]:
get_clf_eval(y_test, preds, pred_proba)
In [6]:
# plot_importance( )를 이용하여 feature 중요도 시각화
from lightgbm import plot_importance
import matplotlib.pyplot as plt
%matplotlib inline
fig, ax = plt.subplots(figsize=(10, 12))
plot_importance(lgbm_wrapper, ax=ax)
Out[6]:
'AI Study > Machine Learning' 카테고리의 다른 글
분류 (3) - Xgboost (0) | 2021.12.12 |
---|---|
분류 (2) - 앙상블 학습 (0) | 2021.12.05 |
분류 (1) - Decision Tree (0) | 2021.12.05 |
머신러닝 성능 평가 지표 (2) - 정밀도,재현율,F1 score, ROC curve (0) | 2021.11.28 |
머신러닝 성능 평가 지표 (1) - 정확도(accuracy_score) (0) | 2021.11.28 |