배고픈 개발자 이야기

[2021/08/27] 파이썬 머신러닝 (XGBoost 유방암 분류) 본문

인포섹 아카데미

[2021/08/27] 파이썬 머신러닝 (XGBoost 유방암 분류)

이융희 2021. 8. 27. 17:45
728x90

XGBoost를 이용한 유방암 데이터 분류 - 캐글 대회에 나왔었음

 

XGBoost라는 객체를 사용하여 유방암 분류 머신러닝 기법을 적용시켜 볼것이다.

import xgboost as xgb
from xgboost import plot_importance
from xgboost import XGBClassifier
import pandas as pd
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
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
import warnings
warnings.filterwarnings('ignore')

 

데이터 초기화 및 객체 생성 및 예측해보는 부분(Decision Tree 10개)

dataset = load_breast_cancer()
X_features = dataset.data
y_label = dataset.target
feature_names = dataset.feature_names
cancer_df = pd.DataFrame(data=X_features)
cancer_df.columns = feature_names
cancer_df['target'] = y_label
# cancer_df.isnull().sum()
# cancer_df['target'].value_counts()

# random_state = 156 : 다음에도 같은 데이터를 train, test로 분리 하는 옵션
X_train, X_test, y_train, y_test = train_test_split(X_features, y_label,
                                                    test_size = 0.2, random_state=156)
xgboost = XGBClassifier(n_estimators=10)
xgboost.fit(X_train,
            y_train,
            eval_set=[(X_test, y_test)],
            eval_metric="error")
pred = xgboost.predict(X_test)

각종 머신러닝 결과값들

 

Decision Tree 100개로 증가 및 최적의 예측을 위한 parameter값 튜닝

xgb_clf = XGBClassifier(n_estimators=100)
params = {
    'max_depth':[5, 7, 9],
    'min_child_weight':[1, 3, 5, 7],
    'colsample_bytree':[0.1, 0.3, 0.5, 0.75, 1.0],
    'learning_rate':[0.0001, 0.001, 0.01, 0.1, 0.2, 0.3]
}
gridcv = GridSearchCV(xgb_clf, param_grid=params)
gridcv.fit(X_train,
           y_train,
           eval_set=[(X_test, y_test)],
           eval_metric="error")
print('GridSearchCV 최적 파라미터:', gridcv.best_params_)
pred = gridcv.predict(X_test)

 

 

 

최적의 Decision Tree의 feature을 중요도 순서대로 정렬

ftr_importance_values = gridcv.best_estimator_.feature_importances_
ftr_importances = pd.Series(ftr_importances_values, index=feature_names)
ftr_importances = ftr_importances.sort_values(ascending=False)

 

 

위의 Feature들을 시각화

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

plt.figure(figsize=(8,6))
plt.title('Feature importances')
sns.barplot(x=ftr_importances, y=ftr_importances.index)
plt.show()

최고의 예측을 보여준 최적의 Decision Tree의 Feature들의 중요도 값으로 이를 기준으로 다음엔 훨씬 더 효율적으로

예측을 진행 할 수 있음

Comments