ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ischange

データの急激な変化の検出

説明

TF = ischange(A) は、A の対応する要素の平均値に急激な変化があった場合に、要素が 1 (true) である logical 配列を返します。

TF = ischange(A,method) は、データの変化点を定義する方法を指定します。たとえば、ischange(A,'variance')A の要素の分散の急激な変化を検出します。

TF = ischange(___,dim) は、上記の構文のいずれかで動作する A の次元を指定します。たとえば、ischange(A,2) は行列 A の各行の変化点を計算します。

TF = ischange(___,Name,Value) は、名前と値のペアの引数を 1 つ以上使用して変化点を検出するための追加のパラメーターを指定します。たとえば、ischange(A,'MaxNumChanges',m)m 個以下の変化点を検出します。

[TF,S1] = ischange(___) は変化点間のライン セグメントに関する情報も返します。たとえば、[TF,S1] = ischange(A) はベクトル A の変化点間におけるデータの平均値を含むベクトル S1 を返します。

[TF,S1,S2] = ischange(___) は変化点間のライン セグメントに関する追加情報を返します。たとえば、[TF,S1,S2] = ischange(A) は各セグメントの平均値を含むベクトル S1 と、ベクトル A の各セグメントの分散を含むベクトル S2 を返します。

すべて折りたたむ

ノイズを含むデータのベクトルを作成し、データの平均値の急激な変化を計算します。

A = [ones(1,5) 25*ones(1,5) 50*ones(1,5)] + rand(1,15);
TF = ischange(A)
TF = 1x15 logical array

   0   0   0   0   0   1   0   0   0   0   1   0   0   0   0

変化点間のデータの平均値を計算するには、2 番目の出力引数を指定します。

[TF,S1] = ischange(A);
plot(A,'*')
hold on
stairs(S1)
legend('Data','Segment Mean','Location','NW')

ノイズを含むデータのベクトルを作成し、データの勾配と切片の急激な変化を計算します。検出しきい値を大きく設定すると、ノイズが原因で検出される変化点の数が少なくなります。

A = [zeros(1,100) 1:100 99:-1:50  50*ones(1,250)] + 10*rand(1,500);
[TF,S1,S2] = ischange(A,'linear','Threshold',200);
segline = S1.*(1:500) + S2;
plot(1:500,A,1:500,segline)              
legend('Data','Linear Regime')

しきい値を指定する代わりに、検出する変化点の最大数を指定することもできます。

[TF,S1,S2] = ischange(A,'linear','MaxNumChanges',3);

行列の各行について、平均値の急激な変化を計算します。

A = diag(25*ones(5,1)) + rand(5,5)
A = 5×5

   25.8147    0.0975    0.1576    0.1419    0.6557
    0.9058   25.2785    0.9706    0.4218    0.0357
    0.1270    0.5469   25.9572    0.9157    0.8491
    0.9134    0.9575    0.4854   25.7922    0.9340
    0.6324    0.9649    0.8003    0.9595   25.6787

TF = ischange(A,2)
TF = 5x5 logical array

   0   1   0   0   0
   0   1   1   0   0
   0   0   1   1   0
   0   0   0   1   1
   0   0   0   0   1

入力引数

すべて折りたたむ

入力データ。ベクトル、行列、多次元配列、table または timetable として指定します。

データ型: single | double | table | timetable

変更検出メソッド。次のいずれかとして指定します。

  • 'mean' — データの平均値の急激な変化を検出。

  • 'variance' — データの分散の急激な変化を検出。

  • 'linear' — データの勾配と切片の急激な変化を検出。

操作次元。正の整数スカラーとして指定します。既定では、ischange はサイズが 1 に等しくない最初の次元に沿って動作します。

たとえば、A が行列である場合、ischange(A,1)A の行に沿って動作し、各列の変化点を計算します。

ischange(A,2)A の列に沿って動作し、各行の変化点を計算します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: TF = ischange(A,'MaxNumChanges',5)

変化点のしきい値。'Threshold' と非負のスカラー値で構成されるコンマ区切りのペアとして指定します。このしきい値を 1 より大きい値にすると、変化点が少なくなります。

このしきい値は、検出する変化点の数を定義しますが、'MaxNumChanges' が指定されている場合には指定できません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

検出する変化点の最大数。'MaxNumChanges' と正の整数スカラーで構成されるコンマ区切りのペアとして指定します。ischange は指定した値以内の数の変化点を計算する自動しきい値を使用するため、'MaxNumChanges' が指定されている場合は 'Threshold' を指定できません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

table 変数。'DataVariables' と、変数名、変数名の cell 配列、数値ベクトル、logical ベクトルまたは関数ハンドルのいずれかで構成されるコンマ区切りのペアとして指定します。'DataVariables' 値は、入力 table または timetable でどの列が操作対象となるかを表し、次のいずれかとして指定できます。

  • 単一の table 変数名を指定する文字ベクトル

  • 各要素が table 変数名である文字ベクトルの cell 配列

  • table 変数インデックスのベクトル

  • 各要素が table 変数に対応する logical ベクトル。true の場合は対応する変数を含めて、false の場合は対応する変数を除外します。

  • 入力として table をとり、論理スカラーを返す関数ハンドル

指定する table 変数は double 型または single 型でなければなりません。

例: 'Age'

例: {'Height','Weight'}

例: @isnumeric

データ型: char | cell | logical | double | single | function_handle

サンプル点。'SamplePoints' とベクトルで構成されるコンマ区切りのペアとして指定します。サンプル点は A のデータの位置を表します。サンプル点は等間隔でサンプリングされている必要はありませんが、一意の要素で並べ替えなければなりません。既定では、サンプル点ベクトルは [1 2 3 ...] です。

入力データが timetable の場合、ischange はこの名前と値のペアをサポートしません。

データ型: double | single | datetime | duration

出力引数

すべて折りたたむ

変化点インジケーター。ベクトル、行列または多次元配列として返されます。TF のサイズは A と同じです。

データ型: logical

変化点間のデータの平均値または勾配。ベクトル、行列、多次元配列、table、timetable のいずれかとして返されます。

  • 変化点検出メソッドが 'mean' または 'variance' の場合、S1 には各セグメントの平均値が含まれます。

  • メソッドが 'linear' の場合、S1 には各セグメントの勾配が含まれます。

s1 のデータ型は入力データと同じです。

データ型: double | single | table | timetable

変化点間のデータの分散または切片。ベクトル、行列、多次元配列、table または timetable として返されます。

  • 変化点検出メソッドが 'mean' または 'variance' の場合、S2 には各セグメントの分散が含まれます。

  • メソッドが 'linear' の場合、S2 には各セグメントの切片が含まれます。

s2 のデータ型は入力データと同じです。

データ型: double | single | table | timetable

詳細

すべて折りたたむ

変化点

データのベクトル A を、次の式を満たすように A1 と A2 の 2 つのセグメントに分割できる場合、このベクトルには変化点が含まれています。

'Threshold' パラメーターで指定されたしきい値で、C はコスト関数を表します。

たとえば、平均値の急激な変化を検出するコスト関数は です。ここで、N はベクトル x の要素数です。コスト関数は、セグメントが平均値によりどの程度近似されているかを測定します。

ischange はコスト関数の合計を繰り返し最小化し、次の式を満たす変化点の数 k とその場所を判定します。

参照

[1] Killick R., P. Fearnhead, and I.A. Eckley. "Optimal detection of changepoints with a linear computational cost." Journal of the American Statistical Association. Vol. 107, Number 500, 2012, pp.1590-1598.

R2017b で導入