読者です 読者をやめる 読者になる 読者になる

xiangze's sparse blog

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

承認欲求.ipynb

主にipython notebookです。

particle filter in python

http://nbviewer.ipython.org/gist/xiangze/9bcefc6fa99c44cc3d64

@teramonagiさんがRで関数を入力することで任意の微分方程式(力学系)をparticle filter(sequential monte-carlo, SMC)でトラッキングできるようなコードを書かれていたので写経しました。Rossler方程式を入れてみました。
http://d.hatena.ne.jp/teramonagi/20140525/1400996808
基本的には以前に書いた記事
http://xiangze.hatenablog.com/entry/20120922/1348334113
と同じでそれに固定ラグ平滑化が追加されています。
非線形力学系、とくに分岐点近傍でのparticle filterによる軌道予測についてはあまり良くわかっていません。パラメータの推定を含めるとすると自己組織型状態空間モデルを使用する必要がありますが、下記の実装が非常に参考になります。
自己組織型状態空間モデルのコード(修正版)
http://qiita.com/shima_x/items/d18643fce1f419987fac

resamplingでのsystem noiseの入れ方に関しては「予測に生かす統計モデリングの基本」を参考にさせていただきました(86 page)。
尤度の計算部分ではlogをとったりはしていないため値が極端に小さくなる場合があり、計算に支障が生ずる場合があります。
stanでは全時系列を1つのデータセットとしてMCMC(HMC,NUTS)による推定を行いますが、sequential monte-carloでは名前のとおり時系列データに対して逐次的に推定を行っていく点が異なります。この2つを組み合わせた手法(Particle MCMC)もあるらしいです。

関連文献?

  • A Bayesian Framework for Parameter Estimation in Dynamical Models

http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0019616

  • Approximate Bayesian computation scheme for parameter inference and model selection in dynamical systems

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2658655/

  • Approximate Bayesian Computation in Population Genetics

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1462356/pdf/12524368.pdf

  • PMCMC, Auxiliary particle filterなどの論文リスト

http://xiangze.tumblr.com/post/90850468649/pmcmc-auxiliary-particle-filter

予測に生かす統計モデリングの基本

予測にいかす統計モデリングの基本―ベイズ統計入門から応用まで (KS理工学専門書)

予測にいかす統計モデリングの基本―ベイズ統計入門から応用まで (KS理工学専門書)

sympyのplot, plot_implicit(陰関数plot)

http://nbviewer.ipython.org/gist/xiangze/f01a38a15de38e0b9bde
単なるプロットのサンプルでsympyのドキュメントのものの抜粋です。

sympy.seriesとsympy.taylorの級数展開の結果の比較

http://nbviewer.ipython.org/gist/xiangze/e6ce4dc2eb4ef41262a0
sympyで超越関数(三角関数、指数関数とその多項式による組み合わせ)などを級数展開して値を代入するのにはseriesではなくpolyval、taylorを組み合わせて使います。またsympy.seriesとsympy.taylorでは係数の並び順序が逆です。
参考
http://docs.sympy.org/dev/modules/mpmath/calculus/approximation.html

感想

nbviewerは単にnotebookを公開、共有するのには便利ですが、一覧のような表示が出来ないのが不便です。
検索フォームに名前とかを入れると関係ないgithubリポジトリも出てきてしまいます。

Rpubs(とtwitter bot)はnotebookを一元管理してくれ、公開もRstudioのボタンひとつで出来るので便利ですが、サイトにつながりにくい場合がある、知識をRpubsに吸収されたくない(nbviewerでもgithubにおいていると同じ)という点が欠点かもしれません。
Rstudioではnotebookの編集中にはMarkdownの状態で表示されるので可読性が少しだけ低く、勉強会、セミナーなどで画面を見せてもわかりづらいというのもあります。