Как обрабатывать пропущенные временные шаги в задачах прогнозирования последовательности с помощью Python

Как обрабатывать пропущенные временные шаги в задачах прогнозирования последовательности с помощью Python

Обычно данные о последовательности отсутствуют в наблюдениях.

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

В этом руководстве вы узнаете, как обрабатывать данные с отсутствующими значениями для задач прогнозирования последовательности в Python с помощью библиотеки глубокого обучения Keras.

После прохождения этого урока вы будете знать:

  • Как удалить строки, содержащие пропущенный временной шаг.
  • Как отметить пропущенные временные шаги и заставить сеть узнать их значение.
  • Как замаскировать пропущенные временные шаги и исключить их из расчетов в модели.

Начните свой проект с моей новой книгой «Глубокое обучение для прогнозирования временных рядов», включая пошаговые инструкции и Исходный код Python файлы для всех примеров.

Давайте начнем.

Нежное введение в линейную алгебру

Нежное введение в линейную алгебру
Фото Стива Кори, некоторые права защищены.

Обзор

Этот раздел разделен на 3 части; они есть:

  1. Проблема прогнозирования эхо-последовательности
  2. Обработка отсутствующих данных последовательности
  3. Обучение с отсутствующими значениями последовательности

Среда

В этом руководстве предполагается, что у вас установлена ​​среда Python SciPy. В этом примере вы можете использовать Python 2 или 3.

В этом руководстве предполагается, что у вас установлен Keras (v2.0.4 +) с серверной частью TensorFlow (v1.1.0 +) или Theano (v0.9 +).

В этом руководстве также предполагается, что у вас установлены scikit-learn, Pandas, NumPy и Matplotlib.

Если вам нужна помощь в настройке среды Python, см. Этот пост:

Проблема прогнозирования эхо-последовательности

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

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

Вопрос в том, что нам делать с временным шагом 1?

Мы можем реализовать задачу прогнозирования последовательности эха на Python.

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

Создать случайную последовательность

Мы можем генерировать последовательности случайных значений от 0 до 1, используя функцию random () в модуле random.

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

Эта функция указана ниже.

Нужна помощь с глубоким обучением для временных рядов?

Пройдите мой бесплатный 7-дневный ускоренный курс электронной почты (с образцом кода).

Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.

Загрузите БЕСПЛАТНЫЙ мини-курс

Кадр как контролируемое обучение

При использовании нейронных сетей последовательности должны быть сформулированы как контролируемая задача обучения.

Это означает, что последовательность необходимо разделить на пары ввода и вывода.

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

Или более формально:

Где y

Результат может быть равен предыдущему наблюдению, например, y

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

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

Функцию Pandas shift () можно использовать для создания сдвинутой версии последовательности, которая может использоваться для представления наблюдений на предыдущем временном шаге. Его можно объединить с необработанной последовательностью для получения входных значений X (t-1) и X

Затем мы можем взять значения из Pandas DataFrame в качестве входной последовательности (X) и использовать первый столбец в качестве выходной последовательности (y).

Собирая все это вместе, мы можем определить функцию, которая принимает количество временных шагов в качестве аргумента и возвращает данные X, y для обучения последовательности, называемую generate_data ().

Демонстрация проблемы последовательности

Мы можем связать код generate_sequence () и generate_data () вместе в рабочий пример.

Полный пример приведен ниже.

При выполнении этого примера создается последовательность, преобразуется в контролируемое представление и печатается каждая пара X, y.

Мы видим, что у нас есть значения NaN в первой строке.

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

Но мы не можем соответствовать модели с входами NaN.

Обработка отсутствующих данных последовательности

Есть два основных способа обработки недостающих данных последовательности.

Они должны удалить строки с отсутствующими данными и заполнить отсутствующие временные интервалы другим значением.

Более общие методы обработки недостающих данных см. В сообщении:

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

Удалить отсутствующие данные последовательности

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

То есть в приведенном выше примере при вводе:

и вывод:

Нет ничего значимого, что можно было бы изучить или предсказать.

Лучше всего удалить эту строку.

Мы можем сделать это во время формулировки последовательности как задачи контролируемого обучения, удалив все строки, содержащие значение NaN. В частности, функция dropna () может быть вызвана до разделения данных на компоненты X и y.

Полный пример приведен ниже:

Выполнение примера приводит к 9 парам X, y вместо 10 с удаленной первой строкой.

Вас также может заинтересовать