最近、いくつかのアルゴリズムを組み合わせる「アンサンブル学習」という方法があるらしいことを知りました。アルゴリズム探していたところXgboostというものを見つけたので、Dockerコンテナで動かしているJupyterでも使えるようにしました。

インストール方法は、公式ドキュメントを参考にしています。

Installation Guide

https://xgboost.readthedocs.io/en/latest/build.html#python-package-installation

Dockerで動かしているJupyter Notebookの環境で使えるようにDockerfileに以下の一行を追加しました。

RUN git clone --recursive https://github.com/dmlc/xgboost

cd xgboost && make -j4 && cd python-package && python setup.py develop --user

最後のPythonパッケージのインストールについては、以下のコマンドではうまく動かなかったので、

sudo python setup.py install

現在のユーザー向けのインストールコマンドで実行しました。

python setup.py develop --user

使い方はこちらの記事をそのまま真似させてもらってます。

PythonでXgboost

http://yag.xyz/blog/2015/08/08/xgboost-python/

RandomizedSearchCVの存在もこちらで知りました。ありがとうございます。


(2017/6/29追記)

スクリプトで利用しているXGBoostのライブラリにGPUを利用するプラグインが追加されてましたので、インストールしました。

CUDA Accelerated Tree Construction Algorithms

ライブラリ自体も前に書いた手順でインストールしてから、以下の手順を実行して、簡単にインストールできました。

cd xgboost

mkdir build

cd build

cmake .. -DPLUGIN_UPDATER_GPU=ON

make -j

scikit-learn互換APIであれば、以下のようにGPUを利用することを明示してあげればOKです。n_jobsは、CPUのスレッド数にしています。CPUスレッド以上に設定してもどうも性能が出にくいです。

xgb_clf = xgb.XGBClassifier(updater='grow_gpu', n_jobs=4)

xgb_clf = clf.fit(X, y)

predicted = xgb_clf.predict_proba(X_pred)

感覚的にはCPUの3倍くらいの性能が出てそうです。引き続きGPUを活用していこうと思います。