さらに、インストール方法や理論の解説も一緒にまとまっていると嬉しいな…。
この記事では、上記のような悩みを解決していきます。
この記事の想定読者
- 機械学習を勉強している人
- 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とは?【概要・理論を解説】
後ほど書いていきます!!