xiangze's sparse blog

機械学習、ベイズ統計、コンピュータビジョンと関連する数学について

KerasとskoptでのBayesian Optimization

使ったアルゴリズム(random forest, neural net, Bayesian Optimization)とデータ(OnlineNewsPopularity)はTJOさんのブログ記事
と全く同じでPythonのライブラリscikit-learnのrandom forestとKeras, bayesianを使っているところが異なります。
gist.github.com

平均二乗誤差の値はRの結果とかなり異なり、random forestはRのものより値が小さく、Kerasでは逆にMXnetよりも誤差が大きくなってしまっています。原因としてはtrain,testに分離したデータが異なるという点も考えられますが、random forestの初期値に起因するところが大きいように思われます。

実際に動かしてみるとnanが出てくることが多く、ニューラルネットの学習にかかる時間の長さもあってまだ使いづらく、random forestやGBMに対する優位性がなさそうです。画像データではまた違うかもしれません。

何回も試行して良いところだけ取り出すのはMCMCと同じく禁じ手のように思われますが、慣れないうちは何度も実行してしまうのは仕方ないです。Kerasでは層の数、活性化関数も簡単に変えることが出来るので、Bayesian optimazationの枠組みでどう扱うかが課題です。グリッドサーチで変えていくことも出来ます。
http://qiita.com/nzw0301/items/69d618faafe73cbd7439
最適化手法としてはGaussian processの他にGradient boostingも使えるそうで面白そうです。
https://scikit-optimize.github.io/#skopt.gbrt_minimize


auto-sklearnというのもあるらしいですが、ソースを見る限りではskoptとは独立したプロジェクトのようです。

パラメータが階層的な構造を持っている場合には統計モデリング言語で記述して、MCMCでサンプリングすることなどが考えられます。pymcでニューラルネットの係数推定を書いた例が以下のものになります。
Bayesian Deep Learning - Quantopian Blog
Bayesian Neural Network in PyMC3 · GitHub

ためになる本

thinkit.co.jp

http://statmodeling.hatenablog.com/entry/book-python-machine-learning
4章のpandasによる前処理、特にtraining dataとtest dataの分割、データの正規化を使いました。
10章の回帰分析とseabornによる可視化(pariplot)
12章のニューラルネットの独自実装、13章のTheano
が少し関係する所になります。
データの予測精度を本気で挙げようとするならば6章のcross validationとPipeline, 7章のアンサンブル学習を使うべきです。