728x90
XGboost는 파이썬 기반과 사이킷런 기반 두 종류를 제공합니다. 하지만 해당 포스팅에서는 앞으로 자주 사용할 사이킷런 기반 XGboost에 대해서만 실습을 진행해보도록 하겠습니다. 데이터셋으로는 예전에 사용했던 위스콘시 암 데이터를 사용하였습니다.
우선 데이터를 분석해보도록 하겠습니다.
# 사이킷런 래퍼 XGboost
from xgboost import XGBClassifier
from xgboost import plot_importance
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()
X_features= dataset.data
y_label = dataset.target
# dataframe으로 변경 후 target 피처 추가
cancer_df = pd.DataFrame(data=X_features, columns=dataset.feature_names)
cancer_df['target']= y_label
print(dataset.target_names)
print(cancer_df['target'].value_counts())
['malignant' 'benign']
1 357
0 212
Name: target, dtype: int64
# 전체 데이터 중 80%는 학습용 데이터, 20%는 테스트용 데이터 추출
X_train, X_test, y_train, y_test=train_test_split(X_features, y_label,
test_size=0.2, random_state=156 )
print(X_train.shape , X_test.shape)
(455, 30) (114, 30)
eval_set은 교차검증을 위한 평가용 데이터셋입니다. 따라서 실제로는 평가용 데이터셋을 따로 구분해야하지만 지금 데이터에서는 데이터의 양이 너무 적어 test데이터를 사용하도록 하겠습니다. 하지만 원칙적으로는 테스트 데이터셋에 대한 과적합이 발생할 수 있기 때문에 이렇게 사용하면 안 됩니다.
# 원래 evals에는 교차검증을 위한 데이터셋을 사용해야함.
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, eval_set=evals, eval_metric="logloss", verbose=True)
w_preds = xgb_wrapper.predict(X_test)
w_pred_proba = xgb_wrapper.predict_proba(X_test)[:, 1]
아래 코드는 100번 이상 성능 향상이 일어나지 않으면 조기 종료하는 파라미터가 추가된 코드입니다.
xgb_wrapper = XGBClassifier(n_estimators=400, learning_rate=0.1, max_depth=3)
evals = [(X_test, y_test)]
# 100번 이상 성능 향상이 없다면 조기 종료
xgb_wrapper.fit(X_train, y_train, early_stopping_rounds=100, eval_metric="logloss",
eval_set=evals, verbose=True)
ws100_preds = xgb_wrapper.predict(X_test)
ws100_pred_proba = xgb_wrapper.predict_proba(X_test)[:, 1]
분류에 사용된 주요 파라미터는 다음과 같습니다.
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)
반응형
'파이썬 머신러닝 완벽가이드' 카테고리의 다른 글
4.6 산타데르 은행 고객 만족도 데이터셋 실습 (0) | 2022.01.10 |
---|---|
4.5 LightGBM 실습 (0) | 2022.01.02 |
4.5 앙상블(부스팅) (0) | 2022.01.02 |
4.4 앙상블 학습(배깅) (0) | 2021.11.23 |
4.3 앙상블 학습(보팅) (0) | 2021.11.23 |