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

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

свернуть все

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

Типы данных: 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 использует автоматический порог, который вычисляет не больше, чем заданное значение точек перехода, таким образом 'Threshold' не может быть задан когда 'MaxNumChanges' задан.

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

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

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

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

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

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

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

  • Таблица vartype индекс

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

Пример: 'Age'

Пример: {'Height','Weight'}

Пример: @isnumeric

Пример: vartype('numeric')

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

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

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

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

свернуть все

Индикатор точки перехода, возвращенный как вектор, матрица или многомерный массив. 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