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

初めてscikit-learn以外のアルゴリズムを使ってみるよ。

なんだか楽しみだね。

以前、勾配ブースティングマシンを勉強しました。勾配ブースティングマシンは「Kaggle」という機械学習のコンペなどでもよく利用されて、良い結果を出しているらしく、その中でも有名な「XGBoost」というものがあることを知りました。XGBoostに興味がありましたので、どのように使うのかを試してみました。はじめてのscikit-learn以外の利用ということで、楽しみです。

勾配ブースティングマシンについては、こちらの記事もご参考ください。

ぱんだクリップ
【AIプログラミング】勾配ブースティングマシンを勉強、乳がんデータを分類 | ぱんだクリップ 勾配ブースティングマシンという名前がかっこいいやつを勉強しました。 アルゴリズムは見た目じゃなくて中身だよ。 決定木の流れで、ランダムフォレストと勉強してきました...

こんな人の役に立つかも

・機械学習プログラミングを勉強している人

・XGBoostについて、簡単に知りたい人

・XGBoostの基本的なプログラミングを勉強している人

目次

XGBoostについて

XGBoostは、勾配ブースティングのアルゴリズムを提供するオープンソースのソフトウェアとのことです。

wikipediaは英語版しかありませんが、Google翻訳してみるとわかりやすい日本語になりました。

あわせて読みたい

言語はC++やJava、Pythonなどで利用できるようになっていて、今回はPythonに読み込んで利用します。

XGBoostしてみよう

プログラミング環境

Google Colaboでも簡単に利用できましたので、おすすめです。

Google Colaboにつきましては、こちらの記事もご参考ください。

ぱんだクリップ
Google Colaboratoryで楽にPythonプログラミングを始める | ぱんだクリップ Pythonプログラミングの学習にはGoogle Colaboratoryが楽で使いやすいよ。 Pythonの体験、機械学習プログラミングなどにはもってこいのプログラミング環境。 私は、最近、J...

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については、こちらの記事もご参考ください。

ぱんだクリップ
【AIプログラミング】ConfusionMatrixを勉強、分類問題の精度をより詳しく | ぱんだクリップ ConfusionMatrixっていうもので、分類問題をもっと詳しく分析できるようになりそうだ。 単純に正解率を出すだけじゃないってことだね。 ConfusionMatrixというものを勉強し...

とりあえず使えたことには使えたんだけれど、パラメータのチューニングが難しそう・・・

XGBoostはパラメータチューニングがいろいろできるらしいね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次