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 object. The axes object 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 object. The axes object 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

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

свернуть все

Входные данные в виде вектора, матрицы, многомерного массива, таблицы или расписания.

Типы данных: 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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: TF = ischange(A,'MaxNumChanges',5)
Опции данных

свернуть все

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

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

Опция для табличного входаОписаниеПримеры
Имя переменной

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

'Var1'

"Var1"

Скалярный переменный индекс

Скалярный индекс табличной переменной

3

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

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

[true false false]

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

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

@isnumeric

vartype индекс

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

vartype('numeric')

Примечание

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

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

Пример: ischange(T,'linear','SamplePoints',"Var1")

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

Табличные переменные, чтобы работать с в виде разделенной запятой пары, состоящей из 'DataVariables' и одна из опций в этой таблице. '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.

Типы данных: логический

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

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

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

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

Типы данных: double | single | table | 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] Киллик Р., П. Фирнхэд и И.А. Экли. "Оптимальное обнаружение changepoints с линейной вычислительной стоимостью". Журнал американской Статистической Ассоциации. Издание 107, Номер 500, 2012, pp.1590-1598.

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

Введенный в R2017b