13

時系列のセンサー状態間隔が与えられた場合、監視されたトレーニング データから学習して一連の状態間隔に基づいてインシデントを検出する分類器を実装するにはどうすればよいですか? 問題を単純化するために、センサーの状態は または のいずれかに縮小されtrueますfalse

更新:同様の問題に対処する時間間隔のマイニング シーケンスに関するこのペーパー (PDF)を見つけました。多変量時系列における階層的時間パターンのマイニングに関する別の論文 (Google Docs)は、斬新なアプローチを採用していますが、階層データを扱っています。

トレーニング データの例

次のデータは、時間の経過に伴うグラフとして表されたインシデントのトレーニング例です。ここで、 はセンサーの状態間隔と状態間隔を/¯¯¯\表します。true\___/false

 Sensor   |  Sensor State over time
          |  0....5....10...15...20...25...  // timestamp
 ---------|--------------------------------
 A        |  ¯¯¯¯¯¯¯¯¯¯¯¯\________/¯¯¯¯¯¯¯¯
 B        |  ¯¯¯¯¯\___________________/¯¯¯¯
 C        |  ______________________________  // no state change
 D        |  /¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯
 E        |  _________________/¯¯¯¯¯¯¯¯\___

インシデント検出 vs シーケンス ラベリング vs 分類

最初に問題を 2 カテゴリ シーケンス ラベル付け問題として一般化しましたが、カテゴリは実際には「通常の操作」とまれな「アラーム イベント」を表しているため、質問をインシデント検出と言い換えました。「通常運用」と「警報発生」のトレーニングデータを用意しています。

問題の複雑さを軽減するために、センサー イベントをブール値に離散化しましたが、必ずしもそうである必要はありません。

可能なアルゴリズム

隠れマルコフモデルは可能な解決策のようですが、状態間隔を使用することはできますか? シーケンス ラベラーがこの問題に対する最良のアプローチではない場合は、別の提案をいただければ幸いです。

ベイジアン確率論的アプローチ

センサーの活動は、時間帯によって大きく異なります (朝は忙しく、夜は静か)。私の最初のアプローチは、数日間にわたって正常なセンサー状態を測定し、時刻 (時間) ごとに状態確率を計算することでした。想定外の時間にセンサー状態が「想定外のしきい値」を超える合計確率は、インシデントを示します。しかし、これは、センサーにノイズが多い場合に誤った警報を発するように思われました。私はまだこれを実装していませんが、このアプローチにはメリットがあると思います。

特徴抽出

ベクトル状態は、特定の時間に発生し、特定の期間続く状態間隔の変化として表すことができます。

struct StateInterval
{
    int sensorID;
    bool state;
    DateTime timeStamp;
    TimeSpan duration; 
}

例えば。プロセス テーブルからのいくつかの状態間隔:

[ {D, true, 0, 3} ]; [ {D, false, 4, 1} ]; ...
[ {A, true, 0, 12} ]; [ {B, true, 0, 6} ]; [ {D, true, 0, 3} ]; etc.

適切な分類器は、状態値の間隔と最近の状態変化を考慮して、状態変化の組み合わせがカテゴリのトレーニング データと厳密に一致するかどうかを判断します。

編集:複数のセンサーのアラームデータから特徴を抽出する方法と、それを以前のデータと比較する方法について、寝た後のいくつかのアイデア...

1 日の各時間について、各センサーについて次のデータを計算することから始めます。

  • 平均状態間隔の長さ (trueと のfalse状態)
  • 状態変化間の平均時間
  • 経時的な状態変化の数

各センサーは、次のようなデータを使用して、マトリックス内の他のすべてのセンサーと比較できます。

  • センサー A が真の状態に変化した後、センサー B が真の状態に変化するまでにかかった平均時間。平均値が 60 秒の場合、1 秒の待機は 120 秒の待機よりも興味深いものになります。
  • センサー A が 1 つの状態にある間にセンサー B が受けた状態変化の平均数

2 セットのトレーニング データが与えられた場合、分類器は、これらの特徴セットから分類の可能性が最も高いカテゴリを判断できる必要があります。

これは賢明なアプローチであり、これらの機能を比較するための優れたアルゴリズムは何でしょうか?


編集:状態変化 ( false->truevs true-false) の方向は重要であるため、すべての機能でそれを考慮する必要があります。

4

3 に答える 3

7

簡単な解決策は、データの時間の側面を折りたたみ、各タイムスタンプを 1 つのインスタンスとして取得することです。この場合、センサーの値は特徴ベクトルと見なされ、各時間ステップはカテゴリ A または B のクラス値でラベル付けされます (少なくともラベル付けされたトレーニング データの場合)。

   sensors      | class
A  B  C  D  E   |
------------------------- 
1  1  1  0  0   |  catA
1  0  0  0  0   |  catB
1  1  0  1  0   |  catB
1  1  0  0  0   |  catA
..

この入力データは、通常の分類アルゴリズム (ANN、SVM など) に供給され、目標は、ラベルのない時系列のクラスを予測することです。

   sensors      | class
A  B  C  D  E   |
------------------------- 
0  1  1  1  1   |   ?
1  1  0  0  0   |   ?
..

次元削減/特徴抽出の中間ステップにより、結果が改善される可能性があります。

特に、隠れマルコフ モデル (HMM) などの手法ではさまざまな状態間の遷移が考慮されるため、明らかに、これはシーケンスの時間ダイナミクスのモデル化ほど良くない場合があります。


編集

以下のコメントに基づいて、ターゲットクラスの一時的な予測を少なくする最良の方法は、予測フェーズの最後に後処理ルールを適用し、分類出力を一連の連続した予測として扱うことです。

これが機能する方法は、クラスの事後確率 (つまり、インスタンスが各クラス ラベルに属する確率分布。バイナリ SVM の場合、決定関数から簡単に導出される確率分布) を計算し、指定されたしきい値を指定すると、予測されたクラスの確率がそのしきい値を超えているかどうかを確認します。そうである場合は、そのクラスを使用して現在のタイムスタンプを予測し、そうでない場合は以前の予測を保持し、将来のインスタンスについても同じことが言えます。これは、現在の予測に特定の慣性を追加する効果があります。

于 2010-10-03T20:19:04.490 に答える
4

これは分類の問題のようには聞こえません。分類子は、実際には「状態変化の組み合わせ」を考慮に入れることを意図したものではありません。シーケンスのラベル付けの問題のようです。隠れマルコフ モデルまたは条件付きランダム フィールドの使用を検討してください。後者の効率的な実装はhttp://leon.bottou.org/projects/sgdにあります。

編集: あなたの質問をもう少し詳しく読みましたが、機能で何をしたいのかを考えると、HMMは最適なモデルではないと思います。それはあなたの状態空間を爆破し、推論を困難にする可能性があります。より表現力豊かなモデルが必要です。動的ベイジアン ネットワークを見ることができます。それらは、状態空間を因数分解された形式で表現できるようにすることで、HMM を一般化します。Kevin Murphy の論文は、私が出会った中で最も詳細なリソースです。

それでもCRFは好きです。簡単に開始できるように、時刻と各センサー読み取り値を各観測の特徴として定義し、bigram 特徴関数を使用します。そこから、それがどのように機能するかを確認し、機能の複雑さを増すことができます。私は簡単に始めます。あなたのアイデアのいくつかを実装するのがどれほど難しいかを過小評価していると思います.

于 2010-10-03T18:16:20.910 に答える
1

なぜ車輪を再発明するのですか?Tクラスを調べる

それでも問題が解決しない場合は、いくつかのポインターも見つけることができます。これが役立つことを願っています。

于 2010-10-06T18:32:13.757 に答える