メインコンテンツ

findDiscord

時系列の行列プロファイルから上位の不一致の位置を検出

R2024b 以降

説明

局所的不一致の位置を返す

locs = findDiscord(MP,MPI) は、matrixProfile コマンドで計算された行列プロファイル ベクトル MP と行列プロファイル インデックス ベクトル MPI から、時系列の局所的不一致の開始位置 locs を返します。

局所的不一致とは、時系列内の他のサブシーケンスからのユークリッド距離に基づいて、その距離が残りの時系列と最も異なるサブシーケンスと定義されています。つまり、局所的不一致は、残りの時系列との違いが最大となるデータのサブシーケンスと定義されます。これらの距離は matrixProfile で判定され、その結果が findDiscord で解析されます。

locs = findDiscord(___,Name=Value) は、前述の構文の入力引数に加えて、1 つ以上の名前と値の引数を使用して追加パラメーターを指定します。たとえば、findDiscord で返す不一致の数を 5 個までに制限するには、MaxNumDiscords5 に設定します。

上位の不一致のプロット

findDiscord(___) は、上位の不一致の位置を行列プロファイル曲線にプロットします。

すべて折りたたむ

T1 で構成されるデータを読み込みます。T1 は、劣化する DC モーターの電機子電流の測定値を含む timetable です。

load matrix_profile_data T1

時系列変数 XT1.MotorCurrent、クエリ セグメントの長さを 100 と指定します。

X = T1.MotorCurrent;
len = 100;

行列プロファイルを計算します。

[MP,MPI] = matrixProfile(X,len);

行列プロファイルをプロットします。

matrixProfile(X,len)

Matrix Profile Plots. The Time-Series plot is on the top. Overlays of yellow and purple on the plotted data show the two top motif pairs and the discord. The Matrix Profile plot, which plots the distances, is in the middle. The Subsequences plot is on the bottom, and shows the subsequences for the top two motif pairs and the discord together.

プロファイルに上位のモチーフ ペア (近傍と最も整合するセグメント) が 2 つ示されており、その位置は 6717 と 3119 です。これらの位置は行列プロファイル プロットの最小値と一致しています。

さらに、位置 9797 に不一致が 1 つ示されています。このサブシーケンスは、その長さの大部分でモチーフのサブシーケンスから明らかに逸脱しています。

findDiscord を使用して不一致をさらに検出します。これは、近傍からの距離が最も離れているセグメントの位置です。上位 4 つの位置を表示します。

locs = findDiscord(MP,MPI);
toplocs = locs(1:4)
toplocs = 4×1

        9797
        9800
        9802
        9792

対応する距離を表示します。

topdist = MP(toplocs)
topdist = 4×1

    8.3894
    8.2062
    8.1517
    7.9777

findDiscord の結果をプロットします。

figure
findDiscord(MP,MPI)

Figure contains an axes object. The axes object with title Matrix Profile, xlabel Time, ylabel Distance contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Distance, Discord.

互いに近くにある不一致は同じ異常の一部と考えられます。そのようなセグメントについては、不一致を 1 つだけ特定する必要があります。セグメントの間隔を改善し、不一致の数を 10 個までに制限します。

findDiscord(MP,MPI,MinSeparation=40,MaxNumDiscords=10)

findDiscord Plots. The Time-Series plot is on the top. The Matrix Profile plot is in the middle. The Matrix Profile Discord plot is on the bottom, and now shows discrete discord instances.

元の行列プロファイルで示されているように、最も高い不一致の位置は 9797 です。それ以外の位置の有意な不一致もプロットに示されています。

入力引数

すべて折りたたむ

時系列内の指定された長さの各サブシーケンスと他のすべてのサブシーケンスとの間の z 正規化ユークリッド距離を含む行列プロファイル。ベクトルとして指定します。MPmatrixProfile コマンドの出力です。

MP の各距離の値に対応するサブシーケンスの開始位置のインデックスを含む行列プロファイル インデックス。MPImatrixProfile コマンドの出力です。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: loc = findDiscord(MP,MPI,MaxNumDiscords=5) は、findDiscord で返す不一致の数を 5 個までに制限します。

不一致間の最小間隔。非負のスカラーとして指定します。MinSeparation が既定値の 0 より大きい場合、findDiscord は指定された分離距離内において行列プロファイル内の最も大きい局所的不一致のみを選択し、他の不一致はすべて無視します。

検出する不一致の最大数。正の整数スカラーとして指定します。findDiscord は、行列プロファイル ベクトルの値に基づいて、重要度が最大のものから最小のものの順に降順で不一致を返します。MaxNumDiscords が指定されていない場合、findDiscord はすべての不一致を返します。

出力引数

すべて折りたたむ

MP の不一致の開始位置。整数ベクトルとして指定します。locs の要素は、最も重要度が高いものから低いものまで、不一致の距離で示される重要度の順に並べられます。

拡張機能

すべて展開する

バージョン履歴

R2024b で導入