exponenta event banner

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

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

свернуть все

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

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

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

Типы данных: 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.

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

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

  • Если используется метод обнаружения точки изменения '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) + start< C (A).

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

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

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

C (A1) + C (A2) +... + C (Ak) + kstart< C (A).

Ссылки

[1] Киллик Р., П. Фернхед и И. А. Экли. «Оптимальное обнаружение точек изменений с линейной вычислительной стоимостью». Журнал Американской статистической ассоциации. Том 107, номер 500, 2012, ст.1590-1598.

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

.
Представлен в R2017b