カルマンフィルター

  • まずはWiki記事
    • 隠れマルコフとの関係(一次マルコフ)、再帰ベイズ、情報フィルタ
    • 離散か連続か
    • 出力のみが観察される場合と、入力情報も取れる場合とがある(入力を選びながら出力を観察し、軌道修正するのは、Multi-armed Bandit問題(とそれに関するThompson sampling)とも繋がりそうで、その話が、こことも繋がる)
    • 状態空間モデル:(状態方程式+観測方程式)
    • x_k = F_k x_{k-1} + B_k u_k + w_k状態方程式
      • 時刻kの状態x_kは、時刻k-1の状態x_{k-1}の(線形(1次))式で表され(F_k x_{k-1})る。ただし、F_kはkで変わる。
      • また、x_{k-1}以外にも、系統だって影響を与える要因があり、それも時刻k依存でB_k u_k
      • それ以外の成分は、系統だって影響を与えないことになるので、期待値は0だけれど、ノイズになっていて、ノイズ成分は、全方向ついて独立だったり同じだったりとするほど単純ではなくて、「全方向の期待値が0」である条件さえ満たせば、それ以外の色々は込めてもよく、それが「共分散行列Q_kをもつ多変量正規乱数w_k \sim N(0,Q_k)と表すそれである
    • z_k = H_k x_k + v_k:観測方程式
      • 観測z_kとは、真の状態の写像(カルマンフィルタでは線形写像、実世界では何かしらの写像)(H_k x_k)であって、そこには観測に伴うノイズv_kもある。ここでもすべて時刻k依存になっている
  • まずはRから(BLAS,LAPAKを使ったCのFKFのラッパーだそうだ)
library(FKF)
  • パッケージの中身は簡単でfkf()とplot.fkf()の2つだけ
  • fkf()は状態方程式と観測方程式の初期値を観測時系列値を与えるとなどが返ってくる
    • フィルタで観測値からフィルタ計算された状態の推定値
    • 観測値から予測した状態値
    • 観測値から予測する状態値のブレ行列の推定値
    • 観測値から状態値を予測するときに用いたブレ行列
    • 観測値と予測値との誤差
    • 観測値と予測値の誤差の分散の行列
    • カルマンゲイン
    • 対数尤度