ischange

Найдите резкие изменения в данных

Синтаксис

TF = ischange(A)
TF = ischange(A,method)
TF = ischange(___,dim)
TF = ischange(___,Name,Value)
[TF,S1] = ischange(___)
[TF,S1,S2] = 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')

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

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

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

свернуть все

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

Типы данных: единственный | удваиваются | таблица | расписание

Измените метод обнаружения, заданный как одно из следующего:

  • среднее значение Найдите резкие изменения в среднем значении данных.

  • Отклонение Найдите резкие изменения в отклонении данных.

  • 'linear' — Найдите резкие изменения в наклоне и прерывании данных.

Операционная размерность, заданная как положительный целочисленный скаляр. По умолчанию ischange действует по первому измерению, размер которого не равняется 1.

Например, если A является матрицей, то ischange(A,1) действует вдоль строк A, вычислительных точек перехода для каждого столбца.

ischange(A,2) действует вдоль столбцов A, вычислительных точек перехода для каждой строки.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: TF = ischange (A, 'MaxNumChanges', 5)

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

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

Типы данных: удвойтесь | единственный | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

Типы данных: удвойтесь | единственный | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

  • Вектор индексов табличной переменной

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

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

Заданные табличные переменные должны иметь тип double или single.

Пример: 'Возраст'

Пример: {'Высота', 'Вес'}

Пример: isnumeric

Типы данных: char | ячейка | логический | удваивается | единственный | function_handle

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

ischange не поддерживает эту пару "имя-значение", когда входные данные являются расписанием.

Типы данных: удвойтесь | единственный | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | datetime | длительность

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

свернуть все

Индикатор точки перехода, возвращенный как вектор, матрица или многомерный массив. TF одного размера как A.

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

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

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

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

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

Типы данных: удвойтесь | единственный | таблица | расписание

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

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

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

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

Типы данных: удвойтесь | единственный | таблица | расписание

Больше о

свернуть все

Точки перехода

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

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

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

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

Ссылки

[1] Killick R., P. Fearnhead и I A. Eckley. "Оптимальное обнаружение changepoints с линейной вычислительной стоимостью". Журнал американской Статистической Ассоциации. Издание 107, Номер 500, 2012, pp.1590-1598.

Смотрите также

| |

Введенный в R2017b

Была ли эта тема полезной?