【AIプログラミング】XGBoostアルゴリズムを使うまで

AIプログラミング

初めて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はパラメータチューニングがいろいろできるらしいね。

タイトルとURLをコピーしました