MachineLearning

XGBoostをPythonで実装する【インストール方法・理論も解説】

XGBoost python インストール 理論
XGBoostの名前だけ知っている人
XGBoostの名前だけ知っている人
XGBoostをPythonで実装したいな…。

さらに、インストール方法や理論の解説も一緒にまとまっていると嬉しいな…。

この記事では、上記のような悩みを解決していきます。

 

この記事の想定読者

  • 機械学習を勉強している人
  • XGBoostの名前だけ知っている人
  • XGBoostの実装から理論面までおさえていきたい人

想定している読者は、上記のとおりです。

 

この記事では「Pythonを使ったXGBoostの実装と理論の解説」を紹介していきます。

XGBoostって、「すごい」と言われているものの、いまいち何がすごいのか分からないですよね…。

 

この記事を読めば、機械学習を勉強したばかりの方でも、XGBoostの実装から理論面までおさえられるようになりますよ。

最近ではLightGBMに最強の座を奪われつつありますが、それでも未だに強いアルゴリズムになっていますので、勉強する価値アリです。

 

個人的におすすめの学習方法

僕のおすすめは、まず実装をしてみて全体を俯瞰した後に、理論を学習していく方法です。

よって、先にPythonコードを紹介して、その後に理論を書きます。他のサイトとは順番が違うかもですが、ご容赦くださいm(_ _)m

 

XGBoostをPythonで実装する【インストール方法】

 

XGBoostをPythonで実装していくにあたり、下記の環境にて進めていきます。

  • ProductName: Mac OS X
  • ProductVersion: 10.13.6

申し訳ないですが、Windowsの方は参考にならない部分ですm(_ _)m

 

Windowsで環境構築がメンドイならGoogle Colaboratoryが良い

もしWindowsを使っていて、XGBoostの環境構築がメンドイと感じる方は、Google Colaboratoryを使って、!pip install xgboostにてXGBoostを導入するのが良いかもです。

環境構築で詰まっている時間がもったいない気がするので。

 

Mac OSの場合

Macを使っている方であれば、pip install xgboostにてインストールが完了します。(※2019/12/20時点)

ただ、他の記事とか見ると分かるように、gccが入っていないと正常に動作しないっぽいです。

僕はどのタイミングで入れたか忘れましたが、gcc -dumpversionで確認してみたところ4.2.1が入っていました。

 

なんかのタイミングでインストールしていたっぽいので、もし`gcc -dumpversion`を叩いてもバージョン確認できない方は、下記コマンドを入力しましょう。

brew install gcc

導入後に、gcc-8 -dumpversionを入力すると、gccのバージョンを確認できるはずです。

※最新バージョンのgccでは、バージョン確認のコマンドがgcc-8に変わっているので注意です。

 

XGBoostをPythonで実装する【サンプルコードあり】

 

環境構築ができたら、さっそく実装をしていきましょう。

scikit-learnに標準で装備されているirisデータを使って、XGBoostを実装していきます。

 

なおXGBoostは、分類問題・回帰問題の両方で使えますが、今回は「花の品種を当てる」ということですので、分類問題になります。

import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

print("=====データの読み込み&分割=====")
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.3, shuffle=True)
print("done.")
print("")

print("=====XGBoostモデルの作成=====")
params = {"objective":"multi:softmax","num_class":3}
print(params)
model = xgb.XGBClassifier(params)
print("")

print("=====GridSearchでパラメータの選定=====")
grid_search = GridSearchCV(model, {'max_depth': [2,4,6,8,10], 'n_estimators': [50,100,200]}, verbose=1)
grid_search.fit(X_train, y_train)
print("パラメータ : " , grid_search.best_params_)
print("精度 : " , grid_search.best_score_)
print("")

print("=====モデルの精度評価=====")
pred = grid_search.predict(X_test)
print(accuracy_score(y_test, pred))

※今回notebookではなく、スクリプト形式にしたので、途中print()を大量に含んでいます。不要であれば、適宜外してください。

 

途中の出力を無視すると、下記のような結果が返ってきます。

=====GridSearchでパラメータの選定=====
パラメータ :  {‘max_depth’: 2, ‘n_estimators’: 50}
精度 :  0.9523809523809523

 

=====モデルの精度評価=====
0.9777777777777777

GridSearchにて最適なパラメータを探したあとで、モデルの精度を測ったところ97.8%という結果になりました。

なかなか高い精度を誇っていることが分かりますね。

 

XGBoostとは?【概要・理論を解説】

 

後ほど書いていきます!!