[pythonML] 부스팅(Boosting)- XGBoost(eXtra Gradient Boost)

2022. 4. 4. 02:24·pythonML
728x90
반응형

# XGBoost 의 개요

GBM에 기반하고 있지만, GBM의 단점인 느린 수행시간, 과적합 규제 등을 해결한 알고리즘

 

#XGBoost의 장점

1. 뛰어난 예측 성능 -> 분류/회귀에서 뛰어난 예측 성능을 발휘함

2. GBM 대비 빠른 수행 시간 ->  GBM에 비해서 빠른 수행성능을 보장함

3. 과적합 규제 -> GBM의 경우 과적합 규제기능이 없음

4. 나무 가지치기 

5. 자체 내장된 교차 검증

6. 결손값 자체 처리 

 

 

# 사이킷런 래퍼 XGBoost의 개요 및 적용

 

  • 사이킷런의 기본 Estimator를 이용해 만들어 fit()과 predict()만으로 학습과 예측이 가능
  • GridSearchCV,Pipeline 등 사이킷런의 유틸리티를 그대로 사용 가능
  • 분류 : XGBClassifier / 회귀 : XGBRegressor

 

# 조기 중단 수행을 하지 않은 성능 결과

# 사이킷런 래퍼 XGBoost 클래스인 XGBClassifier 임포트
from xgboost import XGBClassifier

evals = [(X_test, y_test)]
xgb_wrapper = XGBClassifier(n_estimators=400, learning_rate=0.1, max_depth=3)
xgb_wrapper.fit(X_train , y_train,  early_stopping_rounds=400,eval_set=evals, eval_metric="logloss",  verbose=True)
w_preds = xgb_wrapper.predict(X_test)
get_clf_eval(y_test , w_preds)
오차 행렬
[[35  2]
 [ 1 76]]
정확도: 0.9737, 정밀도: 0.9744, 재현율: 0.9870,    F1: 0.9806, AUC:0.9665

 

사이킷런 래퍼 XGBoost에서 조기 중단 기능을 수행할 수 있는데 fit( )에 해당 파라미터를 입력하면 됨.
→ early_stopping_rounds, eval_metrics, eval_set

 

 

# 조기 중단 수행 후의 성능 결과

xgb_wrapper.fit(X_train, y_train, early_stopping_rounds=10, 
                eval_metric="logloss", eval_set=evals,verbose=True)

ws10_preds = xgb_wrapper.predict(X_test)
get_clf_eval(y_test , ws10_preds)
get_clf_eval(y_test , ws100_preds)
오차 행렬
[[34  3]
 [ 1 76]]
정확도: 0.9649, 정밀도: 0.9620, 재현율: 0.9870,    F1: 0.9744, AUC:0.9530

 

# 조기 중단을 너무 급격하게 줄인 경우

# early_stopping_rounds를 10으로 설정하고 재 학습. 
xgb_wrapper.fit(X_train, y_train, early_stopping_rounds=10, 
                eval_metric="logloss", eval_set=evals,verbose=True)

ws10_preds = xgb_wrapper.predict(X_test)
get_clf_eval(y_test , ws10_preds)
오차 행렬
[[34  3]
 [ 2 75]]
정확도: 0.9561, 정밀도: 0.9615, 재현율: 0.9740,    F1: 0.9677, AUC:0.9465

 

# 피처 중요도 시각화

from xgboost import plot_importance
import matplotlib.pyplot as plt
%matplotlib inline

fig, ax = plt.subplots(figsize=(10, 12))
# 사이킷런 래퍼 클래스를 입력해도 무방. 
plot_importance(xgb_wrapper, ax=ax)

728x90
반응형

'pythonML' 카테고리의 다른 글

[pythonML] 회귀- 경사하강법  (0) 2022.04.17
[pythonML] 회귀 - 단순 선형 회귀  (0) 2022.04.17
[pythonML] 부스팅(Boosting) - GBM /AdaBoost  (0) 2022.04.01
[pythonML] 보팅(Voting)-soft voting/hard voting  (0) 2022.03.29
[pythonML] 결정 트리 (Decision Tree)  (0) 2022.03.20
'pythonML' 카테고리의 다른 글
  • [pythonML] 회귀- 경사하강법
  • [pythonML] 회귀 - 단순 선형 회귀
  • [pythonML] 부스팅(Boosting) - GBM /AdaBoost
  • [pythonML] 보팅(Voting)-soft voting/hard voting
ISFP의 블로그
ISFP의 블로그
이건 첫 번째 레슨, 업무에서 마주친 문제 해결 경험 공유하기 이건 두 번째 레슨, 개인적으로 공부한 데이터/AI 지식을 기록하기 이건 세 번째 레슨, 다른 사람과 비교하지 말고 오직 어제의 나와 비교하기
  • ISFP의 블로그
    resultofeffort
    ISFP의 블로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • python (25)
      • pythonML (27)
      • Linux (0)
      • 오류Error (8)
      • information (7)
      • Deep learning (5)
      • pytorch (29)
      • 코딩테스트 (4)
      • 밑바닥 DL (4)
      • 논문 리뷰 (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
ISFP의 블로그
[pythonML] 부스팅(Boosting)- XGBoost(eXtra Gradient Boost)
상단으로

티스토리툴바