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 |