モデルの特徴
XGBoostは、Extreme Gradient Boostingの略で、スケーラブルで分散型の勾配ブースト決定木(GBDT)機械学習ライブラリです。並列木ブースティングを提供し、回帰、分類、ランキング問題のための主要な機械学習ライブラリです。
Kaggleなどのコンペティションで多く利用されている傾向にあります。
Baseとなっている手法
- Decision Trees
- Enemble Learning
- Gradient Boosting
学習のステップ
STEP1
全ての学習データに対して、等しい重み付けで学習を行い、決定境界を引きます。これを弱学習器による学習と言います。
STEP2
STEP1で正しく識別されたデータの重みが下げられ、誤って識別されたデータの重みが上げられています。高く重み付けがなされたデータは決定境界で正しく識別されていますが、他のデータは誤って分類されています。
STEP3
STEP2と同様の傾向があります。このような弱学習器による処理を繰り返すことで識別性能を高めていきます。
Finally
最終的には最適な決定境界を引くことができるような識別器を求めていきます。
サンプルコード
今回はXGBoostを利用して、2値分類のモデルを作成してみる。
import xgboost as xgb
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from matplotlib import pyplot as plt
""" Binary Classification by XGBoost"""
dataset = datasets.load_breast_cancer()
X, y = dataset.data, dataset.target
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.3,
shuffle=True,
random_state=42,
stratify=y)
# scikit-learn API を備えた分類器
clf = xgb.XGBClassifier(objective='binary:logistic',
# 'num_boost_round' の代わり
# adding 1 estimator per round
n_estimators=1000)
evals_result = {}
clf.fit(X_train, y_train,
# 学習に使う評価指標
eval_metric='logloss',
# 学習時に用いる検証用データ
eval_set=[
(X_train, y_train),
(X_test, y_test),
],
early_stopping_rounds=10,
# 学習過程の記録はコールバック API で登録する
callbacks=[
xgb.callback.record_evaluation(evals_result)
],
)
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print('Accuracy:', acc)
# 学習過程の名前は 'validation_{n}' になる
train_metric = evals_result['validation_0']['logloss']
plt.plot(train_metric, label='train logloss')
eval_metric = evals_result['validation_1']['logloss']
plt.plot(eval_metric, label='eval logloss')
plt.grid()
plt.legend()
plt.xlabel('rounds')
plt.ylabel('logloss')
plt.show()
コメント