배고픈 개발자 이야기
[2021/08/27] 파이썬 머신러닝 (XGBoost 유방암 분류) 본문
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들의 중요도 값으로 이를 기준으로 다음엔 훨씬 더 효율적으로
예측을 진행 할 수 있음
'인포섹 아카데미' 카테고리의 다른 글
[2021/08/31] 파이썬 머신러닝 (시계열 분석_지수이동평균) (0) | 2021.08.31 |
---|---|
[2021/08/30] 파이썬 머신러닝 (시계열 분석_이동평균) (0) | 2021.08.30 |
[2021/08/25~26] 파이썬 머신러닝 랜덤포레스트 (0) | 2021.08.25 |
[2021/08/24] 파이썬 머신러닝 Decision Tree (0) | 2021.08.24 |
[2021/08/11] SQL 주식 데이터 쿼리4 (0) | 2021.08.11 |
Comments