でーたさいえんすって何それ食えるの?

RとかPythonとかと戯れていたい

Microsoft LightGBMをmacOSで触ってみた

モチベーション

普通なマシン(Macbook Air)で分析してるので、ライトウェイトかつ高速な勾配ブースティング環境って有難いわけですよね。
さらに、kaggleのBOSCHコンペで暫定3位の方のソリューションでもこのLightGBMが使われてたそうなので、
さらに興味が湧いて触ってみたという感じです。

www.kaggle.com

そもそもGBMって何?

GBMとは、Gradient Boosting Machineの略で、勾配ブースティング機のコトです。 機械学習コンペでは精度上げやすいのと、ディープラーニングほどリソースバカ食いしないためかよく使われているそうです。

詳しい事は、私が説明するよりここらへんのリンクを見ると良いです。

smrmkt.hatenablog.jp

要は損失関数の最小化って最適化をしていてて、損失関数を最小化するパラメータを見つける方法は勾配降下法(最急降下法ニュートン法e.t.c.)ってことです。

ここで取上げるLightGBMの他にはRのxgboostやscikit-learnに入ってるGradientBoostingClassifierでも使うことができます。 xgboostに関してはTJOさんのこの記事辺りを見ると良さげです。

tjo.hatenablog.com

で、LightGBMとは?

Microsoftが公開した勾配ブースティング用パッケージです。

githubで公開されており、そこでの説明だと次のような特徴があるそうです。

  • トレーニングが早くて効率的
  • メモリ消費が少ない
  • 精度が高い
  • 並列に学習させられる
  • 大規模なデータも対応可能

インストール

ここがちょっと詰まった…
ざっくり詰まりポイントをあげると2ポイントあって、
1. 私はmacport派なので、homebrewと同居させるのはコンフリクトの恐れもあるしで避けたかった
2. そもそもhomebrew + g++-6でうまくいかなかった
という残念な状況に。。。

で、結局はmacportのgcc6を使ってコンパイルして無事通りました。
gitとcmakeとgcc6のインストールが事前に必要なので、そこはよしなに入れておいてください。

LightGBM自体のインストール方法はgithubのインストール手順をすこーしだけ変えればOKで、
具体的には次のコマンドを打ち込めばOKです。

git clone --recursive https://github.com/Microsoft/LightGBM
cd LightGBM
mkdir build
cd build
cmake -DCMAKE_CXX_COMPILER=g++-mp-6 ..
make -j

5行目だけ、オリジナルのやり方と違います。
macportでgcc6をインストールしている環境だとg++-mp-6があるはずなので、
コンパイラの指定をそいつに変えてやれば無事コンパイルできます。 cmakeでwarningが出て来るかもしれませんが、実行には特に差し支えないので気にせずやっちゃってOKです。

うまくビルドできると、LightGBM直下にlightgbmという実行ファイルが生成されているハズです。

使い方

実行ファイルのlightgbmを実行したいディレクトリにコピーして、
データとトレーニング/スコアリングのやり方を定義したconfファイルをそれぞれ用意し、
lightgbmの実行引数に渡して実行してあげればOKです。

実際にLightGBMのレポジトリをクローンした時にいっしょにオチてくるexamplesでやってみましょう。
どの例も、macbook Airで秒単位で終わるので、サクっと気軽にお試しできます。

このexamplesの中には必要なデータとconfファイルが既に入ってるので、
README.md通りにコマンドを打ち込めばlightGMBを試すことができます。

例えばexamples/binary_classificationで試すとすると、binary_classificationの中にlightgbmをコピーして

./lightgbm config=train.conf

で予測モデルを作成して

./lightgbm config=predict.conf

で予測値を吐き出させる

これだけでOKです!

実際に自分のデータとモデルで実行する場合は、このexamplesにあるconfファイルをテンプレとして編集していけば良さそうです。 データはヘッダ無しのタブ区切りであれば良いみたいです。

詳しくはまた時間をとって探ってみたいなーと思います。

ENJOY!!