xgBoost
는 Extreme Gradient Boosting 알고리즘으로 원래 C++로 작성되었으나 캐글 경진대회에서 너무나도 뛰어난 성능을 보여 R을 비롯한 파이썬에서도 API를 통해 활용할 수 있도록 저변이 확대되었다. 물론 자바, 스칼라에서도 사용할 수 있다.
xgBoost를 이해하기 위해서는 기본적으로 지도학습(supervised learning), 의사결정나무(decision tree), 부스팅(boosting)과 함께 앙상블(ensemble)에 대한 이해를 전제로 하고 있다. 자세한 사항은 앙상블(ensemble) 모형을 참조한다.
xgBoost를 설치하는 방법은 윈도우 환경에서 먼저 The environment is inconsistent, please check the package plan carefully
오류를 만날 수 있으니... 먼저.. 환경을 최신 환경으로 맞춘 후에 xgBoost
를 설치한다.
conda clean --all
, conda update --all
conda install anaconda
conda install -c mndrake xgboost
, conda install -c anaconda py-xgboost
참고: How to install xgboost in Anaconda Python (Windows platform)?
먼저 xgBoost 헬로월드를 찍어보자. 데이터는 데이터캠프 블로그 Avinash Navlani(August 14th, 2018), "Predicting Employee Churn in Python", Datacamp을 참조한다.
# 경고 출력하지 않음 -----------
import warnings
warnings.filterwarnings('ignore')
# 라이브러리와 데이터 가져오기
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import xgboost as xgb
import sklearn
import sklearn.metrics as metrics
print('sklearn version: %s' % sklearn.__version__)
print('xgboost version: %s' % xgb.__version__)
hr_df = pd.read_csv("data/HR_comma_sep.csv")
hr_df.head()
colnames = ['satisfaction_level', 'last_evaluation', 'number_project', 'average_montly_hours', 'time_spend_company', 'Work_accident',
'promotion_last_5years']
X, y = hr_df[colnames], hr_df[['left']]
X_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.3, random_state=777)
xg_clf = xgb.XGBClassifier(objective='binary:logistic', n_estimators=10, seed=777)
xg_clf.fit(X_train, y_train)
pred = xg_clf.predict(X_test)
print(f'정확도: {metrics.accuracy_score(y_test, pred)}')
# 라이브러리와 데이터 가져오기
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
import xgboost as xgb
from sklearn.model_selection import cross_val_score
# 훈련/시험 데이터 분리
hr_df = pd.read_csv("data/HR_comma_sep.csv")
colnames = ['satisfaction_level', 'last_evaluation', 'number_project', 'average_montly_hours', 'time_spend_company', 'Work_accident',
'promotion_last_5years']
X, y = hr_df[colnames], hr_df[['left']]
X_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.3, random_state=777)
# 파이프라인 구축
xgb_pipeline = Pipeline([
("xgb_model", xgb.XGBClassifier(objective='binary:logistic', n_estimators=10, seed=777))
])
# 예측 ----------------------------
xgb_pipeline.fit(X, y, xgb_model__eval_metric='auc')
preds = xgb_pipeline.predict(X_test)
print(f'정확도(파이프라인): {metrics.accuracy_score(y_test, preds)}')