xiangze's sparse blog

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

最近のpymcの進展(ノンパラベイズ)

pymcはpythonの文法の枠内で統計モデルが書けてMCMCを実行することで推定が出来るライブラリです。
最近開発に色々な進展があったので勉強しています。
https://pymc-devs.github.io/pymc3/

ノンパラメトリックベイズモデルは任意の数の変数を持つ確率過程を用いるモデルですが、これをプログラミング言語で実装するのは少し難しいように思ったのですがデータ数が有限なことなどを考えると書くことができます。

ディリクレ過程

カテゴリカル分布に従う不定個数の離散的な確率変数の共役事前分布として使われるディリクレ過程はstick breaking processという方法で実装できます。pymcでは
https://gist.github.com/xiangze/d7a5c475bfd5b946a1c7#file-pymc-ipynb
の[25]のcomponentのように数行で書くことが出来ます。
データ数にも依存しますがjupyterでの実行時間[26]を見ると2,3分程度とそんなに時間はかかっていません。

ガウス過程

ガウス過程はそのグラフから取り出した任意個の点の集合が常に多次元のガウス分布に従うような関数の確率分布です。
観測変数が等間隔な場合はブラウン運動の従う確率過程であるオルンシュタイン=ウーレンベック過程はpymcではGaussianRandomWalk関数として提供されています。https://pymc-devs.github.io/pymc3/GP-smoothing/
不等間隔の時もモデルを書くことができ、以下の[9]のように書けます。
https://gist.github.com/xiangze/d7a5c475bfd5b946a1c7#file-simplegp-ipynb
上のような単純なモデルでは平均、分散を解析的に計算することもできますが、階層を持ったモデルなどより複雑な場合にはMCMC(または変分ベイズ?)を使わなければいけないようです。

変数の多い最適化問題で事前分布を指定するBayesian Optimizationでガウス過程は用いられるらしいのですが、pymcは現状GPUは使えないのでdeep learning向けのパラメータ探索にはそのままは使えなさそうです。