ischange

Обнаружение резких изменений в данных

Описание

пример

TF = ischange(A) возвращает логический массив, элементы которого равны 1 (true) когда происходит резкое изменение среднего значения соответствующих элементов A.

пример

TF = ischange(A,method) задает, как задать точку изменения в данных. Для примера, ischange(A,'variance') находит резкие изменения в отклонении элементов A.

пример

TF = ischange(___,dim) задает размерность A для работы с любым из предыдущих синтаксисов. Для примера, ischange(A,2) вычисляет точки изменения для каждой строки матрицы A.

пример

TF = ischange(___,Name,Value) задает дополнительные параметры для нахождения точек изменения с помощью одного или нескольких аргументов пары "имя-значение". Для примера, ischange(A,'MaxNumChanges',m) обнаруживает не более m изменить точки.

пример

[TF,S1] = ischange(___) также возвращает информацию о сегментах линии, находящихся между точками изменения. Для примера, [TF,S1] = ischange(A) возвращает вектор S1 содержащее среднее значение данных между точками изменения вектора A.

пример

[TF,S1,S2] = ischange(___) возвращает дополнительную информацию о сегментах линии, находящихся между точками изменения. Для примера, [TF,S1,S2] = ischange(A) возвращает вектор S1 который содержит среднее значение для каждого сегмента, а также вектор S2 который содержит отклонение для каждого сегмента вектора A.

Примеры

свернуть все

Создайте вектор зашумленных данных и вычислите резкие изменения среднего значения данных.

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

Чтобы вычислить среднее значение данных между точками изменения, задайте второй выходной аргумент.

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

Figure contains an axes. The axes contains 2 objects of type line, stair. These objects represent Data, Segment Mean.

Создайте вектор зашумленных данных и вычислите резкие изменения наклона и точки пересечения данных. Установка большого порога обнаружения уменьшает количество точек изменения, обнаруженных из-за шума.

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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent 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

Входные параметры

свернуть все

Входные данные, заданные как вектор, матрица, многомерный массив, таблица или 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)
Опции данных

свернуть все

Точки выборки, заданные как разделенная разделенными запятой парами, состоящая из 'SamplePoints' и вектор. Точки выборки представляют x местоположения данных в осях A, и должен быть отсортирован и содержать уникальные элементы. Точки выборки не нужно равномерно отбирать. Вектор точек выборки по умолчанию [1 2 3 ...].

Примечание

Эта пара "имя-значение" не поддерживается, когда входные данные являются timetable. В Timetables всегда используется вектор времени строки в качестве точек выборки. Чтобы использовать различные точки выборки, необходимо отредактировать расписание так, чтобы время в строке содержало требуемые точки выборки.

Пример: ischange([1 2 3 4 5 6],'linear','SamplePoints',[1 2 3 10 20 30])

Типы данных: single | double | datetime | duration

Табличные переменные для работы, заданные как разделенная разделенными запятой парами, состоящая из 'DataVariables' и один из опций в этой таблице. The 'DataVariables' значение указывает, какие переменные таблицы входа необходимо изучить на предмет точек изменения. Тип данных, сопоставленный с указанными переменными, должен быть double или single. Другие переменные в таблице, не заданные 'DataVariables' не работают, поэтому выходы содержат false значения для этих переменных.

ОпцияОписаниеПримеры
Имя переменной

Вектор символов или скалярная строка, задающая имя табличной переменной

'Var1'

"Var1"

Вектор имен переменных

Массив ячеек из векторов символов или строковых массивов, где каждый элемент является именем табличной переменной

{'Var1' 'Var2'}

["Var1" "Var2"]

Скаляр или вектор переменных индексов

Скаляр или вектор табличных переменных

1

[1 3 5]

Логический вектор

Логический вектор, элементы которого каждый соответствуют табличной переменной, где true включает соответствующую переменную и false исключает его

[true false true]

Указатель на функцию

Указатель на функцию, который принимает табличную переменную как вход и возвращает логический скаляр

@isnumeric

vartype индекс

Индекс таблицы, сгенерированный vartype функция

vartype('numeric')

Пример: ischange(T,'DataVariables',["Var1" "Var2" "Var4"])

Изменение опций точки

свернуть все

Порог точки изменения, заданный как разделенная разделенными запятой парами, состоящая из 'Threshold' и неотрицательный скаляр. Увеличение порога больше 1 создает меньше точек изменения.

Пороговое значение определяет количество обнаруженных точек изменения и не может быть задано когда 'MaxNumChanges' задан.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Максимальное количество точек изменения для обнаружения, заданное как разделенная разделенными запятой парами, состоящая из 'MaxNumChanges' и положительный целочисленный скаляр. ischange использует автоматический порог, который вычисляет не более заданного значения точек изменения, таким образом 'Threshold' не может быть задано, когда 'MaxNumChanges' задан.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Измените индикатор точки, вернитесь в виде вектора, матрицы или многомерного массива. TF - тот же размер, что и A.

Типы данных: logical

Среднее значение или наклон данных между точками изменения, возвращенный в виде вектора, матрицы, многомерного массива, таблицы или timetable.

  • Если метод обнаружения точек изменения 'mean' или 'variance', затем S1 содержит среднее значение для каждого сегмента.

  • Если метод 'linear', затем S1 содержит уклон для каждого сегмента.

s1 имеет тот же тип и входные данные.

Типы данных: double | single | table | timetable

Отклонение или точки пересечения данных между точками изменения, возвращенные в виде вектора, матрицы, многомерного массива, таблицы или timetable.

  • Если метод обнаружения точек изменения 'mean' или 'variance', затем S2 содержит отклонения для каждого сегмента.

  • Если метод 'linear', затем S2 содержит точку пересечения для каждого сегмента.

s2 имеет тот же тип и входные данные.

Типы данных: double | single | table | timetable

Подробнее о

свернуть все

Изменение точек

Вектор данных A содержит точку изменения, если его можно разделить на два сегмента A1 и A2 таким, что

C(A1)+C(A2)+τ<C(A).

τ - пороговое значение, заданное 'Threshold' параметр, и C представляет функцию затрат.

Например, функция затрат для обнаружения резких изменений в среднем C(x)=Nvar(x), где N - количество элементов в вектор x. Функция затрат измеряет, насколько хорошо сегмент аппроксимируется своим средним значением.

ischange итерационно минимизирует сумму функций затрат, чтобы определить количество точек изменения k и их местоположения, такие что

C(A1)+C(A2)+...+C(Ak)+kτ<C(A).

Ссылки

[1] Killick R., P. Fearnhead и I.A. Eckley. «Оптимальное обнаружение точек изменения с линейной вычислительной стоимостью». Журнал Американской статистической ассоциации. Том 107, № 500, 2012, стр. 1590-1598.

Расширенные возможности

.
Введенный в R2017b