パーティクルフィルタのテスト

概要

・パーティクルフィルタ(aka 粒子フィルタ or 逐次モンテカルロ法)のテスト
・とりあえず特定化されたモデルを対象
・勉強したことから成敗するためという名目で写経状態。ちなみにこの記事の全内容は参考文献に書いてあります。
・パーティクルフィルタスゲー

モチベーション

そもそもなんでパーティクルフィルタをやる必要があるかというところですが、一言で言うと「オンライン推定ができるから」ということになります。

・カルマンフィルタ:完全に特定化されたモデルの場合はカルマンフィルタでオンライン推定が可能。ただし通常は未知パラメータがモデルに含まれるため推定が必要
・MCMC:無いならパラメータを弾けば良いじゃないとなりますが計算が重い。しかも新たな観測値を得られたら、最新の状態を推定するために1からモンテカルロをぶん回す必要がある。そんな悠長なことは言っていられない。

未知パラメータを含みつつも、カルマンフィルタのように状態を逐次的に更新していくアルゴリズムがパーティクルフィルタというクラスに属する手法と。

モデルの超概要(という名の自分の中での理解)

結局求めたいのは状態\( \theta_t \)の期待値(と標準偏差くらい)なわけでして、

$$
E\left( \theta_t \right) = \sum_{i=1}^N w^{\left( i \right)} \delta_{\theta_t^{\left( i \right)}}
$$

という感じで、確率x値 という期待値の計算のように分解して状態を推定していきます。
ここで、\( w^{\left( i \right)} \)は重み、\( \delta_{\theta_t^{\left( i \right)}} \)が密度という感じで、イメージ的には各粒子にこの重みと密度を持たせてるという理解ですな。

で、あとは各粒子の重みと密度を新たな観測値が得られる度に更新していくわけですが、今回の記事では最適重点核(optimal importance kernel)という更新方法を使っています。
また、粒子を更新していくと次第に外れていく不良粒子が現れてきます。そのときはリサンプリングというプロセスを経由して、粒子を新たに生成させます。
最適重点核やリサンプリングの詳しい方法は参考文献参照ということで^^;;

Rコード

これはひどい写経だ!!

変数名まで一緒という手抜き使用^^;;;
まず下図が\( \theta_t \)の推定結果。実際の観測値、カルマンフィルタ、パーティクルフィルタの結果です。
カルマンフィルタとほぼ近い値が推定されています。

140627_1

そして下図が粒子数1000の場合のフィルタリング分布の標準偏差。パーティクルフィルタでの推定は若干ブレがあります。
ただしこれは粒子数を増やせばある程度精度が改善されます。

140627_2

粒子数10000の場合は以下の様な感じ
140627_3

参考文献

Amazon.co.jp: Rによるベイジアン動的線形モデル (統計ライブラリー): G.ペトリス, S.ペトローネ, P.カンパニョーリ, 和合 肇, 萩原 淳一郎: 本
http://www.amazon.co.jp/dp/4254127960
-> 神本です。

  • 萩原淳一郎

    はじめまして。
    『Rによるベイジアン動的線型モデル』の訳者です。
    本書をご活用いただいているようで、大変光栄です。
    朝倉書店の下記サイトから本書のサポートファイルが取得可能になっておりまして、マニュアルやビニエットの参考和訳等も含まれておりますので、ご活用いただければと思います!

  • 萩原淳一郎

    度々すみません。リンク先を記載し忘れておりました...

    http://www.asakura.co.jp/books/isbn/978-4-254-12796-6/

     

     

    • Nekopuni

      このような辺鄙なサイトまでお越し頂きありがとうございます。DLMに関して初学者にも分かりやすく、非常に本書は参考にさせて頂いております!
      ビニエットの和訳があったんですね。こちらも参考にさせて頂きますm(__)m