渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

{rBayesianOptimization}パッケージによるベイズ最適化で機械学習パラメータチューニングをお手軽に

機械学習のパラメータチューニングというと大なり小なり大変な部分があって、今年のエイプリルフール記事に皆さん引っかかって下さったところを見るにパラメータチューニングを簡単に済ませたい!と願う人々は世の中多いようです(笑)。


少し前のMXnetを使った記事でも取り上げましたが、そのパラメータチューニングを迅速に済ませようというアイデアの一つがベイズ最適化(Bayesian Optimization)です。

要は、グリッドサーチのように網羅的に最適なパラメータを探索しに行くのではなく、一つのパラメータで精度をチェックしたらその次は精度が上がりやすそうな方向にベイズ的に逐次改善を行いながら探索していく、という方法のことです。


世の中色々seminar paper的なものがあるようですが、arXivから@さんが見つけてきて下さったのがこれ。

日本語のブログ記事なら、id:olanleedさんのこちらの記事が良いと思います。


ということでこれらのreferencesを紹介してしまえば理論的なポイントは全ておしまいなのですが、リンク先を読むのも面倒という人のためにごくごく簡単な説明だけを書いておきます。ただし僕は数学が大の苦手なので数式は紹介する気もない上に、そもそも上記のreferencesからの受け売り以外何もありません(笑)。

続きを読む

統計的因果推論(1): 差分の差分法(Difference-in-Differences)をRで回してみる

世の中様々な介入効果・施策効果を検証するためのexperimentが行なわれていると思うんですが、意外とその効果検証というのは難しいものです。特にいわゆる統計的因果推論の立場から見れば、web上で接触する一般ユーザーに対する介入や施策といったものの検証を完全にランダム化比較試験(Randomized Controlled Trial: RCT)として実施するのは困難です。


この問題について統計的因果推論の観点からは様々なソリューションを与えることが可能なようです。例えば傾向スコア(Propensity Score)は最近色々なところで取り上げられていますし、バックドア基準といったものも挙げられます。で、今回はその中でも差分の差分法(Difference-in-Differences: DID)を取り上げることにします。理由は単純で「どうしてもexperimentによって何かしらの介入・施策の効果の有無を明らかにしたい」というケースで特に有用だと個人的には思われるからです。


おおまかな概要については、『差分の差分法』Wikipedia記事が分かりやすいかと思います。また「差の差法」という呼称になっていますが、不肖僕も刊行委員として参画している岩波DS第3巻の山口慎太郎先生の解説で取り上げられています。

岩波データサイエンス Vol.3

岩波データサイエンス Vol.3


具体的なやり方についてはweb上の記事に良いものがいくつかあって、例えばこちらの記事は非常に分かりやすいです。

ということで、色々勉強しながらRで回すところまでやってみようかと思います。

Disclaimer

上記のreferencesしか読んでいないので、間違っているところが沢山ある可能性があります。もし間違っているところを見つけた方は、ぜひぜひツッコミを入れてくだされば幸いですm(_ _)m

続きを読む

Deep Learningで遊ぶ(2): オンラインニュース人気度+ベイズ最適化によるパラメータチューニング

追記(2016年8月22日)

{rBayesianOptimization}の使い方を間違えていて、この記事の下部では実際にはテスト誤差ではなくトレーニング誤差を評価してしまっていますorz 実際にはScore返値にholdoutを入れるのが正解です。別に{rBayesianOptimization}単体で取り上げた記事を書きましたので、正しい使い方はそちらをお読みください。


Deep Learningをだらだらと実践してみるこのシリーズ、前回は分類だったので今回は回帰でやってみようと思います。お題はUCI ML repositoryの"Online News Popularity"です。とあるサイトに掲載されたオンラインニュース記事がそれぞれどれくらいシェア(おそらくSNS類に)されたかを、様々な特徴量と合わせて収めた39644行×61列のデータセットです。


元のニュース記事が非公開である代わりに、特徴量の中には例えばLDAにかけた時の各トピックに属する確率とかsentiment analysisの結果とかも含まれていて、ある意味極めて綺麗に前処理済みのデータと見ることも出来るかと思います。いわば至れり尽くせりのデータセットですね(笑)。これをDeep Learningで回帰してやろうというのが今回の目標です。


なおいつもながらのお断りですが、この記事はあくまでも僕個人の備忘録的なMXnetの実行例メモ的な何かです。本当にちゃんとDeep Learningを実践したい方や他のTensorFlow / Chainer / Kerasなどなどでの実践例をご覧になりたい方はこんな駄文ではなく他の記事を是非ご参照くださいorz

続きを読む