メインコンテンツ

matrixProfile

単変量時系列または多変量時系列のすべてのサブシーケンス ペア間の行列プロファイルを計算

R2024b 以降

説明

行列プロファイルは、時系列内の非常によく似たサブシーケンスか大きく異なるサブシーケンスを特定することで異常動作を検出する距離ベースの手法です。

同様のサブシーケンス ("モチーフ") は、多くの場合、時系列内の通常動作を表します。特異なサブシーケンス ("不一致") は、異常の可能性を示します。アルゴリズムにより、各サブシーケンス ペアの z 正規化ユークリッド距離を計算することで、時系列内のすべてのサブシーケンスが同じ長さの他のすべてのサブシーケンスと比較されます。それらの間の最小距離をもつサブシーケンス ペアを "最近傍" と呼びます。matrixProfile は、それらの最小距離 (小さいものから大きいものの順) とプロファイル内の対応する最近傍のインデックスを含むベクトルまたは行列を返します。

行列プロファイルを返す

MP = matrixProfile(X,len) は、単変量時系列または多変量時系列 X"行列プロファイル" を返します。行列プロファイルは、X の長さ len の各サブシーケンスとそれに最も近い近傍との間の最小の z 正規化ユークリッド距離のベクトルです。

  • X がベクトルの場合、単一チャネルとして扱われます。

  • X が行列の場合、各列について行列プロファイルが別々に計算されます (多変量解)。

matrixProfile には、計算を実行するためのアルゴリズムが 2 種類あります。

  • STAMP アルゴリズム (Scalable Time series Anytime Matrix Profile) は、随時および並列の計算をサポートしており、単変量と多変量のどちらのデータ セットでも機能します。"随時" の機能では、完了前にアルゴリズムを停止することができ、それでも許容できる精度の解が得られます。これは、完全な解の計算にかなりの時間がかかる場合に特に便利です。計算をいつ停止するかは、名前と値の引数 MaxIteration で決まります。

  • STOMP アルゴリズム (Scalable Time series Ordered Matrix Profile) は、STAMP アルゴリズムよりも約 log2(n) 倍高速です。これは、GPU があり、随時の機能は必要がない場合の単変量時系列に便利です。

MP の上位の不一致およびモチーフの位置は、関数 findDiscord および findMotif を使用して検出できます。

[MP,MPI]=matrixProfile(X,len) は、サブシーケンスに対する最近傍の位置の行列プロファイル インデックス ベクトル MPI も返します。

[___] = matrixProfile(___,Name=Value) は、前述の構文の引数に加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、並列処理を使用するには、UseParalleltrue に設定します。

行列プロファイルのプロット

matrixProfile(___) は、行列プロファイルの対話型プロットを表示します。この構文は、前述の任意の入力引数の組み合わせで使用できます。

すべて折りたたむ

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 です。それ以外の位置の有意な不一致もプロットに示されています。

入力引数

すべて折りたたむ

評価する時系列。長さ n の数値ベクトル、または長さ n の複数の列を含む数値行列として指定します。X に欠損データがあってはなりません。

クエリ サブシーケンスの長さ。整数として指定します。len は時系列の長さ n より小さくなければなりません。

名前と値の引数

すべて折りたたむ

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

例: MP = matrixProfile(X,len,UseParallel=true) は、並列処理を使用します。

行列プロファイル計算時に除外するクエリ シーケンス周囲の除外ゾーンの長さ。除外するデータ点の数として指定します。この引数により、クエリ サブシーケンス自体との誤一致が防止されます。

x の端点付近のクエリ ウィンドウを扱う方法。次のオプションのいずれかとして指定します。

  • "discard" — 出力ベクトル MP および MPI の長さを nlen + 1 までで切り捨てます。ここで、nX の長さです。

  • "fill"MPlen – 1 個の NaN でパディングして MP および MPI の長さを n まで拡張します。ベクトル I の最後の len – 1 個の要素がシーケンス (nlen + 2:n) に設定されます。

AlgorithmSTAMP として指定されている場合に MP の上限を計算するための最大反復回数。整数として指定します。MaxIteration により、随時の機能を使用して完了前にアルゴリズムを停止する場合の計算の期間が決まります。

既定値は nlen+1 で、アルゴリズムが最後まで実行されます。

計算を高速化するために並列プールを使用するオプション。false (逐次計算を使用) または true (並列計算を使用) として指定します。

このオプションは、GPU 配列ではなく CPU 配列を使用する場合にのみ true に設定できます。

使用する行列プロファイル アルゴリズム。"STAMP" または "STOMP" として指定します。

  • "STAMP" アルゴリズム (Scalable Time series Anytime Matrix Profile) は、随時および並列の計算をサポートしており、単変量と多変量のどちらのデータ セットでも機能します。"随時" の機能では、完了前にアルゴリズムを停止することができ、それでも許容できる精度の解が得られます。アルゴリズムの停止時間は MaxIteration の値で制御されます。

  • STOMP アルゴリズム (Scalable Time series Ordered Matrix Profile) は、STAMP アルゴリズムよりも約 log2(n) 倍高速です。これは、GPU があり、随時の機能は必要がない場合の単変量時系列に便利です。

使用できるアルゴリズムは、計算の構成とデータ変数の数によって異なります。

マルチコア CPUGPU 配列多変量
UseParallel=1UseParallel=0任意の CPU/GPU 構成
STAMP のみSTOMP または STAMPSTAMP のみ

出力引数

すべて折りたたむ

時系列 X の各サブシーケンスに対する最も一致する近傍を含む行列プロファイル。ここで、各サブシーケンスの長さは len です。数値ベクトルまたは数値行列として返されます。

"最も一致する近傍" は、サブシーケンス ペア間のすべての z 正規化距離のうちの最小値と定義されます。

  • X がベクトルの場合、MP の計算時に単一チャネルとして扱われます。

  • X が行列の場合、各列について行列プロファイルが別々に計算されます。

MP の長さは、EndPoints の設定に応じて n または nlen+1 のどちらかと等しくなります。

ExclusionZoneLength の値により、アルゴリズムが X の取り得るすべてのクエリ シーケンスを処理する際に、クエリ サブシーケンス自体との誤一致が防止されます。

MP の上位の不一致および上位のモチーフ ペアの位置は、関数 findDiscord および findMotif を使用してそれぞれ検出できます。

インデックス k から始まる長さ len のサブシーケンスに対する最近傍の位置 MPI(k) の行列プロファイル インデックス ベクトル。

サブシーケンス X(k:k+len-1) からサブシーケンス X(MPI(k):MPI(k)+len-1) までの距離が、取り得る最小距離となります。

参照

[1] Yeh, Chin-Chia Michael, et al. “Matrix Profile I: All Pairs Similarity Joins for Time Series: A Unifying View That Includes Motifs, Discords and Shapelets.” 2016 IEEE 16th International Conference on Data Mining (ICDM), IEEE, 2016, pp. 1317–22. DOI.org (Crossref), https://doi.org/10.1109/ICDM.2016.0179.

[2] Zhu, Yan, et al. “Matrix Profile II: Exploiting a Novel Algorithm and GPUs to Break the One Hundred Million Barrier for Time Series Motifs and Joins.” 2016 IEEE 16th International Conference on Data Mining (ICDM), IEEE, 2016, pp. 739–48. DOI.org (Crossref), https://doi.org/10.1109/ICDM.2016.0085.

拡張機能

すべて展開する

バージョン履歴

R2024b で導入

すべて展開する