[pythonML] 부스팅(Boosting)-LGBM(Light Gradient Boost Machine)

2022. 7. 15. 15:03·pythonML
728x90
반응형

# LGBM 의 개요

LGBM은 일반 GBM 계열의 트리 분할 방법과 다르게 리프 중심 트리 분할 방식을 사용함. 이는 트리의 균형을 맞추지 않고 최대 손실 값을 가지는 리프 노드를 지속적으로 분할하면서 드리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성됨. 이렇게 지속적으로 분할해 생성된 규칙 트리는 학습을 반복할수록 예측 오류 손실을 최소화 할수 있음

 

 

# LGBM 의 장점

  • 더 빠른 학습과 예측 수행 시간
  • 더 작은 메모리 사용량
  • 카테고리형 피처의 자동 변환과 최적의 분할

 

단점 : 적은 데이터 세트에 적용하면 과적합이 발생하기 쉬움

 

# 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)
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):
    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_score(y_test, pred)
    print('오차 행렬')
    print(confusion)
    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)
오차 행렬
[[33  4]
 [ 1 76]]
정확도: 0.9561, 정밀도: 0.9500, 재현율: 0.9870,    F1: 0.9682, AUC:0.9395

앞 포스팅에서 진행한 XGBoost 에서 나온0.9649 보단 작지만 워낙 학습,테스트 데이터 세트 크기가 작아서 알고리즘 간 성능 비교는 큰 의미가 없다.

 

# 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)

728x90
반응형
저작자표시 (새창열림)

'pythonML' 카테고리의 다른 글

[pythonML] 회귀 트리  (0) 2022.07.16
[pythonML] 회귀- 다항회귀  (0) 2022.07.16
[pythonML] ROC곡선과 AUC , F1스코어 - 평가  (0) 2022.07.11
[pythonML] 정밀도와 재현율 - 평가  (0) 2022.07.11
[pythonML] 정확도와 오차행렬 - 평가  (0) 2022.07.10
'pythonML' 카테고리의 다른 글
  • [pythonML] 회귀 트리
  • [pythonML] 회귀- 다항회귀
  • [pythonML] ROC곡선과 AUC , F1스코어 - 평가
  • [pythonML] 정밀도와 재현율 - 평가
ISFP의 블로그
ISFP의 블로그
이건 첫 번째 레슨, 업무에서 마주친 문제 해결 경험 공유하기 이건 두 번째 레슨, 개인적으로 공부한 데이터/AI 지식을 기록하기 이건 세 번째 레슨, 다른 사람과 비교하지 말고 오직 어제의 나와 비교하기
  • ISFP의 블로그
    resultofeffort
    ISFP의 블로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (119)
      • python (25)
      • pythonML (27)
      • Linux (0)
      • 오류Error (8)
      • information (7)
      • Deep learning (5)
      • pytorch (29)
      • 코딩테스트 (4)
      • 밑바닥 DL (4)
      • 논문 리뷰 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    인공지능
    deeplearning
    Python
    Deep Learning
    Pandas
    machinelearning
    자연어처리
    분류
    konlpy
    오블완
    데이터분석
    텍스트전처리
    pytorch
    cnn
    Ai
    머신러닝
    nlp
    티스토리챌린지
    토큰화
    딥러닝
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
ISFP의 블로그
[pythonML] 부스팅(Boosting)-LGBM(Light Gradient Boost Machine)
상단으로

티스토리툴바