Вопрос или проблема
У меня есть несколько последовательностей произвольных одномерных временных рядов (не относящихся к одной конкретной области, с неограниченным диапазоном). Последовательности имеют разную длину, и сейчас я не могу объединить их в батчи и передать в сеть. Какова правильная процедура дополнения этих последовательностей? Возможно ли это в данном случае, если я не могу использовать любое число в качестве специального символа?
Для примера одной из таких серий рассмотрим стандартизированный набор данных по акциям (показаны только первые 10 элементов):
d = array([-0.37807043, 0.14321786, -0.37807043, 0.13478392, 0.18733381,
1.19576774, 0.25675156, 0.26064414, 0.30930144, 0.38650436])
То, как вы будете дополнять последовательности (и даже будете ли вы это делать), будет зависеть от ваших ожиданий относительно данных. Это накладывает граничные условия на данные, которые могут вызвать артефакты в любом преобразовании, которое вы выполните. Насколько сильно это влияние зависит от того, насколько хорошо ваши данные подходят для принятия конкретного метода дополнения.
Методы дополнения включают дополнение нулями или периодическую границу.
Дополнение не обязательно должно выполняться в временной области. Например, интерполяция в частотной области и обратное преобразование позволяет вам экстраполировать.
Если ваша аналитика имеет конечную историю (например, FIR-фильтры), то вы можете изолировать временные области, где дополнение не требуется, и провести сравнения на их основе.
Если я правильно вас понимаю, у вас есть несколько одномерных временных рядов, которые вы хотите объединить в многомерный, но не можете этого сделать, потому что они имеют разную длину. Я думаю, что вы можете найти этот гид по маскировке и дополнению полезной отправной точкой. В вашем случае я думаю, что маскировка необходима, так как у вас будут батчи, когда один или несколько рядов необходимо дополнить. Альтернативой является сначала обучить модель импутатора, чтобы восполнить недостающие временные ряды из оставшихся.
Ответ или решение
Как правильно выполнить паддинг реальных последовательностей
При работе с последовательностями временных рядов, находящихся вне зависимости от конкретной области применения и обладающих неограниченным диапазоном значений, вы сталкиваетесь с задачей объединения последовательностей различной длины для последующего использования в нейронных сетях. Паддинг (периферийная обработка) таких последовательностей становится важным аспектом, который возможно придется рассмотреть более детально.
Зачем это нужно?
Необходимость паддинга возникает, когда вам необходимо передать данные в пакетном режиме: многие модели глубокого обучения требуют фиксированной длины входных данных. Паддинг позволяет создавать единые структуры данных, сводя количество изменений размера до минимума.
Методы паддинга
Вот несколько распространенных способов паддинга, которые можно применить к вашим данным:
-
Нулевой Паддинг: Наиболее простой и популярный метод. Вы добавляете дополнительные нулевые значения в конце последовательности, чтобы выровнять все последовательности до максимальной длины. Однако это может вызвать проблемы, поскольку нули могут ввести в заблуждение модель, так как они будут восприниматься как данные.
-
Паддинг средним значением или медианой: Вместо нулей можно использовать среднее значение по всем элементам данных. Это может помочь избежать влияния нулей, но также предполагает, что ваше значение не сильно влияет на данные. Аналогично, использование медианного значения может быть хорошей альтернативой, особенно в случае выбросов.
-
Использование специальных символов: Если вы не можете использовать нули или любое другое конкретное число, вы можете заранее определить специальный символ, например, NaN (Not a Number), для обозначения паддинга. Это позволит модели различать паддинг и реальную информацию.
-
Паддинг с учетом контекста: Если необходимо, вы можете предварительно обработать данные, чтобы создать более контекстуальный паддинг. Это может включать интерполяцию данных, чтобы они заполнили пробелы в последовательности.
-
Маскирование: Это касается более высокоуровневого подхода, при котором вы по-прежнему используете паддинг, но одновременно создаете маску для вашей нейронной сети, чтобы игнорировать паддинг в процессе обучения. Это может быть отличным вариантом, позволяющим избежать влияния паддинга на обучение модели.
Применение паддинга в практике
Применение паддинга должно учитывать особенности ваших данных и ту задачу, которую вы собираетесь решать. Паддинг устанавливает определенные границы для данных и может индукционировать артефакты в ходе анализа, особенно если это связано с преобразованиями данных. Для некоторых методов, таких как конечные импульсные фильтры (FIR), паддинг не всегда необходим, и вы можете изолировать области времени, в которых это не требуется.
Выводы
Паддинг последовательностей временных рядов — это критически важный этап подготовки данных, который требует серьезного внимания. Разные методы паддинга могут иметь разные последствия для качества анализа. Важно тщательно продумать, как ваши данные будут восприниматься моделью и как паддинг может повлиять на результаты. Если вы всё же не знаете, какой метод выбрать, рассмотрите возможность создания отдельной модели для импутации недостающих данных, что позволит более эффективно использовать информацию и улучшить качество вашего анализа.
Дополнительные ресурсы
Для получения более подробной информации о маскировании и паддинге, пожалуйста, ознакомьтесь с этой статьёй от TensorFlow, которая станет хорошей отправной точкой для глубокого понимания этой темы.