Кодирование временных рядов как изображений

Грамиановая визуализация углового поля

Бум глубокого обучения во многом обусловлен его успехом в области компьютерного зрения и распознавания речи. Однако, когда дело доходит до временных рядов, построение прогнозных моделей может быть ужасным (Рекуррентные нейронные сети трудно обучить, исследования менее применимы, а предварительно обученных моделей не существует, 1D-CNN может быть неудобным).

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

Помимо математических предпосылок (скейлер min-max, скалярное произведение и матрица грамма), этот пост будет содержать объяснения и решения по следующим вопросам:

  • Почему матричная структура Грама является хорошим двумерным представлением одномерных временных рядов?
  • Почему скалярный продукт матрицы Грама не может представлять данные для CNN?
  • Какая операция делает структуру матрицы Грама готовой для CNN?

а также сущность Python:

  • Эффективная реализация вычислений углового поля Грамиана.
  • Генерация гифок с использованием matplotlib + movieditor.

TL: DR: Мы выполняем полярное кодирование данных, за которым следует операция, подобная матрице Грама, над полученными углами.

Предварительные требования по математике

Поскольку математика грамианового углового поля неразрывно связана с внутренним произведением и соответствующей матрицей Грама, вот напоминание:

Поскольку математика этого метода неразрывно связана с внутренним продуктом и соответствующей матрицей Грама, я напишу краткое напоминание о его значении.

Скалярное произведение

Внутренний продукт - это операция между двумя векторами, которая измеряет их «сходство». Он позволяет использовать понятия традиционной евклидовой геометрии: длина, углы, ортогональность в измерениях 2 и 3.

В простейшем случае (2D-пространство) скалярное произведение между двумя векторами u и v определяется как:

и можно показать, что:

Следовательно, если u и v имеют норму 1, мы получаем:

Следовательно, при работе с единичными векторами их внутренний продукт характеризуется исключительно углом θ (выраженным в радианах) между u и v. Кроме того, результирующее значение находится в пределах [-1, 1].

Эти свойства пригодятся нам в оставшейся части статьи.

Примечание. В условиях Евклида (размер n) внутреннее произведение двух векторов u и v формально определяется как

Матрица Грама

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

Определение: матрица Грама набора n векторов - это матрица, определяемая скалярным произведением (см. сходство ) каждой пары векторов. Математически это означает:

Опять же, предполагая, что все 2D-векторы имеют единицу нормы, мы получаем:

где Φ (i, j) - угол между векторами i и j.

Ключевой вывод: зачем использовать матрицу Грама?

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

Примечание. Эта статья также основана на интуиции, что одномерные временные ряды каким-то образом не могут объяснить совпадение и скрытые состояния данных; мы должны стремиться найти альтернативные и более богатые представления.

Наивная реализация

Давайте вычислим матрицу Грама значений временного ряда:

Масштабируйте серию с помощью масштабатора Min-Max на [-1, 1]

Чтобы внутренний продукт не был смещен в пользу наблюдения с наибольшим значением, нам нужно масштабировать данные:

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

Однако в сочетании со скейлером Min-Max внутренний продукт сохраняет выходной диапазон:

Выбор скалярных произведений в пределах [-1, 1] небезобиден. Диапазон [-1, 1] крайне желателен, если не необходим, в качестве входного диапазона для нейронных сетей.

Шумные изображения?

Теперь, когда временной ряд масштабирован, мы можем вычислить попарные скалярные произведения и сохранить их в матрице Грама:

Давайте разберемся с этим отображением, изучив значения G:

Мы наблюдаем две вещи:

  1. Выходные данные, похоже, соответствуют гауссовскому распределению с центром вокруг 0.
  2. В результате появляется шумное изображение.

Первое объясняет второе, потому что чем больше гауссовы данные, тем труднее отличить их от гауссовского шума.

Это будет проблемой для наших нейронных сетей. Кроме того, установлено, что CNN лучше работают с разреженными данными.

Происхождение нередкости

Гауссово распределение не вызывает особого удивления. Глядя на трехмерный график значений внутреннего продукта z для всех возможных комбинаций (x, y) ∈ R², мы получаем:

При предположении, что значения временного ряда следуют равномерному распределению [-1, 1], значения матрицы Грама подчиняются гауссовскому распределению. Вот гистограммы выходных данных матрицы Грама, оцененные для различных длин временных рядов n:

Предварительное кодирование

Зачем он нам нужен?

Поскольку одномерные временные ряды являются одномерными, а скалярное произведение не позволяет отличить ценную информацию от гауссовского шума, нет другого способа воспользоваться «угловыми» отношениями, кроме как изменить пространство.

Поэтому мы должны закодировать временную серию в пространстве как минимум из двух измерений, прежде чем использовать конструкции, подобные матрице Грама. Для этого мы построим биективное отображение между нашей 1D временной серией и 2D пространством, чтобы не потерять никакой информации.

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

Шаг 1. Масштабируйте серию до [-1, 1] с помощью масштабатора Min-Max.

Действуем так же, как и в наивной реализации. В сочетании со скейлером Min-Max наше полярное кодирование будет биективным, а функция arccos будет биективной (см. Следующий шаг).

Шаг 2. Преобразуйте масштабированный временной ряд в «полярные координаты»

Необходимо учитывать две величины: значение временного ряда и его соответствующую метку времени. Эти две переменные будут выражены соответственно с помощью угла и радиуса.

Предполагая, что наш временной ряд состоит из N временных меток t с соответствующими значениями x , затем:

  • Углы вычисляются с помощью arccos (x). Они лежат в [0, ∏].
  • Переменная радиуса вычисляется: сначала мы делим интервал [0, 1] на N равных частей. Таким образом, мы получаем N + 1, ограничивающие точки {0,…, 1}. Затем мы отбрасываем 0 и последовательно связываем эти точки с временным рядом.

Математически это означает следующее:

Эта кодировка имеет несколько преимуществ:

  1. Вся кодировка биективна (как композиция биективных функций).
  2. Он сохраняет временную зависимость через координату r. Это окажется чрезвычайно полезным [*].

Внутренний продукт для временных рядов?

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

Почему не внутренний продукт полярных кодированных значений?

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

  • Внутренний продукт между двумя отдельными наблюдениями будет смещен в пользу самого последнего (потому что норма со временем увеличивается).
  • При вычислении внутреннего продукта наблюдения с самим собой результирующая норма также смещается.

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

Использование углов

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

Чтобы лучше всего объяснить индивидуальную и объединенную информацию с двух сторон, автор определяет операцию, альтернативную внутреннему продукту:

где θ - соответствующие углы от кодировки x и y.

Примечание. Я выбираю другой символ вместо использования внутреннего продукта по причинам, потому что эта операция не удовлетворяет требованиям внутреннего продукта (линейность, определенно положительный результат).

Это приводит к следующей граммоподобной матрице:

Автор мотивирует свой выбор следующим образом: «Во-вторых, в отличие от декартовых координат, полярные координаты сохраняют абсолютные временные отношения».

Преимущества

  1. Диагональ составляется из исходного значения масштабированного временного ряда (мы будем приблизительно реконструировать временной ряд по высокоуровневым характеристикам, изученным глубокой нейронной сетью).
  2. Временные корреляции учитываются с относительной корреляцией путем наложения направлений относительно временного интервала k. ТОЧНЫЙ

К более редкому представлению?

Давайте теперь изобразим плотность значений углового поля Грамиана:

Как видно из графика выше, угловое поле Грамиана намного реже. Чтобы объяснить это, давайте повторно выразим uv в декартовых координатах:

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

Давайте разберемся с ролью этого штрафа. Давайте сначала посмотрим на трехмерный график всей операции:

Как мы можем видеть:

  • Штраф сдвигает средний результат в сторону -1.
  • Чем ближе x и y к 0, тем больше штраф. Основным следствием этого является то, что точки, которые были ближе к гауссовскому шуму ... (с точкой) (со штрафной точкой)
  • Для x = y: приводится к -1
  • Выходы легко отличить от гауссовского шума.

Недостатки

  • Однако с главной диагональю сгенерированный GAM является большим из-за увеличения n ⟼n², где длина необработанного временного ряда равна n. Автор предлагает уменьшить размер GAF с помощью аппроксимации кусочного агрегирования (Keogh, Pazzani 2000).
  • Это не внутренний продукт ..

Покажи мне код!

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

Что касается gif, я скоро его выпущу (реализовано с помощью matplotlib, numpy и moviepy).

Источники

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

В этой статье также упоминается еще один интересный метод кодирования: марковское переходное поле. Эта кодировка не рассматривается в этой статье.





Https://arxiv.org/pdf/1506.00327.pdf

Https://stats.stackexchange.com/questions/47051/sparse-presentations-for-denoising-problems