xgboostが使いたくて
修行編を終えても一向にkaggleのスコアが上がらない。 ランダムフォレストやらSVMやらロジスティック回帰やら いろんなものを使ってみたけど上がらない
こまった。
フォーラムに何か有力情報はないだろうか。 そう思ってフォーラムを見たところ 少なくとも今取り組んでいるコンペではxgboostがいいらしい。
つかってみたい。 藁をも掴む思いで調べた。
これが長い戦いのはじまりだった。
初日
そもそもxgboostってなんだ、なにをやっているんだろう。
簡単に調べたところ弱分類器を複数組み合わせて 強力な分類器を作るということをやっているみたいだ。 ランダムフォレストに似ている気がするなぁというのが第一印象。 ランダムフォレストは弱分類器を決定木にして、それを複数組み合わせて 強力な分類器を作るという理屈じゃなかったろうか。
並列処理をさせるとか、弱分類器同士の優先順位とかその辺りが 違いそうな気はするけど、しらべていたらいつまでも調べて要られそうなきがした。
強いこころで、「まず使ってみる」を優先することにした。 なんてことだ、sklearnにないじゃないか。 インストールは翌日することにした。
二日目
環境構築を第一目標に作業開始。 kaggleのフォーラムをみたら
- ターミナルひらけよ
- gitのリポジトリcloneしろよ
- ビルドしろよ おわり
と書いていた。やってみた。 gitのリポジトリを cloneするところまでは良さそうだ。 ( フォーラムに書かれていた奴には--recusiveついてなかったが。)
git clone https://github.com/dmlc/xgboost.git --recursive
xgboostというディレクトリができているのでcdで移動 sudo make してビルド。
めっちゃWarningされてる dmlc-core/include/dmlc/omp.h:13:9: warning: Warning: OpenMP is not available, なんちゃらかんちゃら
OpenMPってなんだよ...
OpenMPは、並列コンピューティング環境を利用するために用いられる標準化された基盤。OpenMPは主に共有メモリ型並列計算機で用いられる。
(゜Д゜) ハア??
まぁよくわからんけど、並列処理をさせるのに必要らしい。 OpenMPを俺のMac環境に入れないと、本来のよさは得られない雰囲気。 また調べものが増えた...
三日目
OpenMPはc/c++環境で動くものらしい。ここで問題が。cなのでコンパイラが必要なんだが どのコンパイラを使うかっていうところがきいてくるようだ。 gccを使えばよいんだろうが、Mavericksからgccがプリインストールされなくなったらしい。 brewで入れてもいいんだけど、プリインストールされていないものを使うのもなぁと思いclangで使うことにする。
なんかよいやつがあるらしいのでこれを使わせてもらう。
cloneして、なかに入ってるスクリプトをうごかす。がめっちゃ警告だされる。
どうやら、clangはちょっとしたことでも警告を出す使用というのをどこかでみた。
このあと、いろいろと頑張ってみたがうまく動かず、(config.mkのここを消せとか、ここも消さないととか)ちょっと面倒になった。
gccでコンパイルすればもしかしてさくっと解決?と思った。
四日目
clang: error: no input files
とか言ってきやがった。 clangじゃねぇよ!gcc使いたいんだよ!! 調べて見るとgccがclangのエイリアスに設定されているらしい。
許せん。
bashrcにalias gcc=gcc-5.2.0 を追加
これでどうじゃと、再びgcc
-bash: gcc-5.2.0: command not found
(ウィンドウを再度開くかbashrcを再度読み込むかするのを忘れちゃあかんで)
期待を込めて、make
同じエラーが出る...。
じゃあやっぱりclangでもええんか..いや、しかし。
ふぅ
clangの情報が溜まってきたのでやっぱりこっちで
再び、奴らの行ってきているmakefile.mkの450行目と451行目を削除する また-static-intelと-no-intel-extensionsがねぇよってうるさいので 1119行目あたりにあるその文言を消す。
make!!!
success !!!
うおおおおおとおもったけど、ソースコード全然読まずになんとなくで消した結果である。
この後何が起こるかさっぱりわかない。まだまだ戦いは続く。