初めてscikit-learn以外のアルゴリズムを使ってみるよ。
なんだか楽しみだね。
以前、勾配ブースティングマシンを勉強しました。勾配ブースティングマシンは「Kaggle」という機械学習のコンペなどでもよく利用されて、良い結果を出しているらしく、その中でも有名な「XGBoost」というものがあることを知りました。XGBoostに興味がありましたので、どのように使うのかを試してみました。はじめてのscikit-learn以外の利用ということで、楽しみです。
勾配ブースティングマシンについては、こちらの記事もご参考ください。
こんな人の役に立つかも
・機械学習プログラミングを勉強している人
・XGBoostについて、簡単に知りたい人
・XGBoostの基本的なプログラミングを勉強している人
XGBoostについて
XGBoostは、勾配ブースティングのアルゴリズムを提供するオープンソースのソフトウェアとのことです。
wikipediaは英語版しかありませんが、Google翻訳してみるとわかりやすい日本語になりました。
言語はC++やJava、Pythonなどで利用できるようになっていて、今回はPythonに読み込んで利用します。
XGBoostしてみよう
プログラミング環境
Google Colaboでも簡単に利用できましたので、おすすめです。
Google Colaboにつきましては、こちらの記事もご参考ください。
Anaconda環境のローカル環境でプログラミングをしている場合、AnacondaPromptにてXGBoostをインストールする必要があるそうです。
プログラミング
Google Colaboにはデフォルトで使えるようになっているみたいで、普通にimportすることで利用できました。
今回も、scikit-learnのトイデータ、乳がんデータで試していきます。
#XGBoostをimport
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import numpy as np
#乳がんデータ
panda_box = load_breast_cancer()
X = panda_box.data
y = panda_box.target
#訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, stratify=y, random_state=0)
データの読み込みまでが完了しました。
次に、XGBoostを作成し、訓練させます。すごく簡単すぎます・・・
※今回はデフォルトのパラメータで行っています。
xgb_clf = xgb.XGBClassifier()
xgb_clf.fit(X_train, y_train)
実行すると、こんな感じに、XGBoostの設定が表示されます。
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
colsample_bynode=1, colsample_bytree=1, gamma=0,
learning_rate=0.1, max_delta_step=0, max_depth=3,
min_child_weight=1, missing=None, n_estimators=100, n_jobs=1,
nthread=None, objective='binary:logistic', random_state=0,
reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
silent=None, subsample=1, verbosity=1)
最後に、正解率、ConfusionMatrixを表示して結果を確認してみます。
xgb_pred_train = xgb_clf.predict(X_train)
xgb_pred_test = xgb_clf.predict(X_test)
#単純な正解率
print("訓練データ")
print(accuracy_score(y_train ,xgb_pred_train))
print("テストデータ")
print(accuracy_score(y_test ,xgb_pred_test))
#ConfusionMatrixを作成
print("==ConfusionMatrix==")
print(confusion_matrix(y_test, xgb_pred_test))
#ClassificationReport
print("==ClassificationReport==")
print(classification_report(y_test, xgb_pred_test))
訓練データ
1.0
テストデータ
0.965034965034965
==ConfusionMatrix==
[[50 3]
[ 2 88]]
==ClassificationReport==
precision recall f1-score support
0 0.96 0.94 0.95 53
1 0.97 0.98 0.97 90
accuracy 0.97 143
macro avg 0.96 0.96 0.96 143
weighted avg 0.96 0.97 0.96 143
ConfusionMatrixや、ClassificationReportで出力されるPrecisionやRecallについては、こちらの記事もご参考ください。
とりあえず使えたことには使えたんだけれど、パラメータのチューニングが難しそう・・・
XGBoostはパラメータチューニングがいろいろできるらしいね。