システム同定の基礎

久しぶりの記事になってしまった…年明け初記事なので、明けましておめでとうございます。

前回の記事で、(当時の)これから勉強したい事について記述をしました。
あれらのうち、状態空間モデルの考え方、カルマンフィルタに関して基本的なところを勉強しました。
しかし、それらの理論はモデルを既知として組み上げられている問題であるため、それだけでは実データへの適用やトライアルは当然うまく当てはまりません。
ということで現在はシステム同定に関する勉強をちゃんとしようと考え、自分なりの勉強のゴールを以下のように設定しました。

  • 対象とする系の状態空間表現を得られるようになる

ということで、以下の書籍を読み込んでおります。

システム同定の基礎

システム同定の基礎

もう一つ、こんな本もあるのですがこれはPRMLのように事前に必要となるの知識レベルが高いとのこと(ソース:職場の優秀な先輩)で、ひとまず断念。

システム同定―部分空間法からのアプローチ

システム同定―部分空間法からのアプローチ

ただし、自分は制御工学は学生時代には履修していない(修士の研究の中でバックシフトオペレータを使った程度です)ため、出現する用語や考え方はその都度調査する必要アリ。

そもそもシステム同定とは何か

システム同定とは、

対象とする動的システムの入出力データの観測値から、ある目的のもとで、対象と同一であることを説明できるような、何らかの数学モデルを作成することをいう。(上記書籍より引用)

つまり、対象の系を数式で表現しましょう、ということ(と自分は解釈しています)。

システム同定の目的

上記文章のなかで、「ある目的のもとで」とあります。
制御工学の文脈の中では、システム同定の目的の多くは「制御系を設計すること」だそう。確かに、加工機械や人工衛星などは正しく制御が行なえなければ重大な事故や損失につながりますね。

ちなみに、本書ではプラントの制御を目的と仮定しているようです。

システム同定のモデル

システム同定を行なうにあたり、数理的なモデルはパラメトリック、ノンパラメトリックの二つのモデルに大別されるとのこと。
ここでいうパラメトリックモデルは「システムの動特性を有限個のパラメータによって特徴づけるモデルのこと」、
ノンパラメトリックモデルは「無限個のパラメータによって構成されているモデル」とのことです。
例)
パラメトリック  :伝達関数状態方程式など
ノンパラメトリック:インパルス応答関数、周波数伝達関数など

統計学とは表現が異なっているものの、言わんとしていることはだいたい同じであると考えていいかなと思います。
ここで、単純な状態空間表現におけるシステムは入力量、状態量、出力量、白色雑音から成ると考え、以下の表現形式を考えます。

{x(k+1) = Ax(k) + Bu(k) + v(k)}
{y(k) = C^{T}x(k) + Du(k) + w(k)}
{v(k), w(k)}はホワイトノイズ

これらに対して部分空間同定法を適用して、どうなるんだろうか。
井手剛先生の書籍「入門 機械学習による異常検知」では入出力を考えていなかったため、今回考慮している対象とは異なるモデリングを行おうとしています。
この時、システム同定の方法はどのように変わってくるだろうか。これから勉強していきたいと思います。

非常に半端ではありますが、今回はここまでにして、未来の自分に任せようと思います。

-- 追記(3/21) --
で、これからどうすんねん、な感じになってしまった。

現状、自分が勉強できていることは

  • 離散時間時不変モデル

  • 線形

  • 入出力のない時系列

に対する部分空間同定法の手法。線形カルマンフィルタも一応自分でコードの作成はしてみたものの、既存のパッケージ(pykalman)と比較すると結果が全然合っていないため、デバッグしなくちゃと思っています。

なので、自分のこれからのアクションは
1. 入出力のある系に対する部分空間同定法の手法を勉強する(状態変数(上では{x(k)} )の次元がわかっていればMCMCなんかでもいいのかも?一旦保留。)
2. それらの勉強をするために必要な制御工学の知識習得(伝達関数って?周波数応答?)
3. アルゴリズムを実装するためのコーディングの練習

として、今後勉強をしていきたいなと思います。
それらとは別に、いい加減CやC++を書けるようになったりDNNの勉強もしなくちゃなぁと思います、上手い感じに捌いていきたい。