728x90
반응형
SMALL
LightGBM
LightGBM은 GBM 계열의 트리 분할 방법과 다르게 리프 중심 트리 분할 방식을 사용한다. 기존의 대부분 트리 기반 알고리즘은 트리의 깊이를 효과적으로 줄이기 위한 균형 트리 분할 방식을 사용한다. 리프 중심 트리 분할은 트리의 균형을 맞추지 않고, 최대 손실 값을 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성 된다. 예측 오류 손실을 최소화 할 수 있다.
LightGBM의 특징
|
LightGBM 하이퍼 파라미터
LightGBM 하이퍼 파라미터는 XGBoost와 많은 부분이 유사하다.
하이퍼 파라미터 | default | 기능 |
Num_iterations | 100 | 반복 수행하려는 트리의 개수를 지정 |
Learning_rate | 0.1 | 0에서 1사이의 값을 지정 (학습률) |
Max_depth | 1 | 트리의 최대 깊이 |
Min_data_in_leaf | 20 | 트리의 최소 깊이 |
Num_leaves | 31 | 하나의 트리가 가질 수 있는 최대 리프 개수 |
boosting | gbdt | 부스팅의 트리를 생성하는 알고리즘 기술 |
Bagging_fraction | 1.0 | 데이터 샘플링 비율 |
Feature_fraction | 1.0 | 개별 트리를 학습할 때마다 무작위로 선택하는 피처 비율 |
Lambda_l2 | 0.0 | L2 regulation 제어를 위한 값 |
Lambda_l1 | 0.0 | L1 regulation 제어를 위한 값 |
LightGBM 설치
아나콘나 프롬프트를 관리자 권한으로 실행 후 다음 명령어 입력한다.
conda install –c conda-forge lightgbm
import lightgbm
print(lightgbm.__version__)
위스콘신 유방암 데이터
# 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
import warnings
warnings.filterwarnings('ignore')
dataset = load_breast_cancer()
cancer_df = pd.DataFrame(data=dataset.data, columns=dataset.feature_names)
cancer_df['target']= dataset.target
cancer_df.head(3)
X_features = cancer_df.iloc[:, :-1]
y_label = cancer_df.iloc[:, -1]
# 전체 데이터 중 80%는 학습용 데이터, 20%는 테스트용 데이터 추출
X_train, X_test, y_train, y_test=train_test_split(X_features, y_label,
test_size=0.2, random_state=156 )
# 위에서 만든 X_train, y_train을 다시 쪼개서 90%는 학습과 10%는 검증용 데이터로 분리
X_tr, X_val, y_tr, y_val= train_test_split(X_train, y_train,
test_size=0.1, random_state=156 )
# n_estimators을 400으로 설정
lgbm_wrapper = LGBMClassifier(n_estimators=400, learning_rate=0.05)
# LightGBM도 XGBoost와 동일하게 조기 중단 수행 가능
evals = [(X_tr, y_tr), (X_val, y_val)]
lgbm_wrapper.fit(X_tr, y_tr, early_stopping_rounds=50, eval_metric="logloss",
eval_set=evals, verbose=True)
preds = lgbm_wrapper.predict(X_test)
pred_proba = lgbm_wrapper.predict_proba(X_test)[:, 1]
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))
get_clf_eval(y_test, preds, pred_proba)
오차 행렬
[[34 3]
[ 2 75]]
정확도: 0.9561, 정밀도: 0.9615, 재현율: 0.9740, F1: 0.9677, AUC:0.9877
# 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)
plt.show()
728x90
반응형
LIST
'Learning-driven Methodology > ML (Machine Learning)' 카테고리의 다른 글
[XGBoost] 위스콘신 유방암 데이터 (1) (0) | 2022.10.04 |
---|---|
[Machine Learning] 앙상블 (Ensemble) (0) | 2022.10.04 |
[Machine Learning] SVM 회귀 (0) | 2022.09.30 |
[Machine Learning] 비선형 SVM 분류 (0) | 2022.09.30 |
[LightGBM] 매개변수 조정 (Parameters Tuning) (2) (0) | 2022.07.04 |