Установка правильного ввода для RNN - PullRequest
8 голосов
/ 03 августа 2020

В базе данных есть данные временных рядов с записями:

  • device - timestamp - temperature - min limit - max limit
  • device - timestamp - temperature - min limit - max limit
  • device - timestamp - temperature - min limit - max limit
  • . ..

Для каждого device есть 4 часа данных временного ряда (с интервалом 5 минут) до того, как сработал сигнал тревоги, и 4 часа данных временного ряда (снова с интервалом 5 минут), что не вызвало никакой тревоги. Этот график лучше описывает представление данных для каждого device:

enter image description here

I need to use RNN class in python for alarm prediction. We define alarm when the temperature goes below the min limit or above the max limit.

After reading the official documentation from tensorflow здесь , у меня проблемы с пониманием того, как установить входные данные для модели. Следует ли мне нормализовать данные заранее или что-то в этом роде, и если да, то как?

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

Любая помощь по поводу того, как X и Y в model.fit должны выглядеть в моем случае?

Если вы видите какие-либо другие проблемы относительно этого проблема смело комментируйте.

PS. Я уже установил python в docker с tensorflow, keras et c. в случае, если эта информация поможет.

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

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

Любая помощь по поводу того, как X и Y в model.fit должны выглядеть в моем случае?

X должно быть numpy матрицей формы [num samples, sequence length, D], где D - количество значений на метку времени. Я предполагаю, что D=1 в вашем случае, потому что вы передаете только значение температуры.

y должен быть вектором целевых значений (как во фрагменте). Бинарный (тревога / not_alarm) или непрерывный (например, максимальное отклонение температуры). В последнем случае вам нужно будет изменить сигмовидную активацию на что-то другое.

Следует ли мне предварительно нормализовать данные

Да, очень важно предварительно обработать ваши необработанные данные. Я вижу здесь 2 важные вещи:

  1. Нормализовать значения температуры с помощью min-max или стандартизации ( wiki , предварительная обработка sklearn ). Кроме того, я бы добавил немного сглаживания.
  2. Удалите некоторую часть последних временных меток из всех временных рядов, чтобы избежать утечки информации.

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

0 голосов
/ 12 августа 2020

Да, вам следует нормализовать ваши данные. Я бы смотрел на разницу каждый день. Интервал разницы составляет 24 часа / 5 минут. Вы также можете попробовать и ежегодную разницу, но это зависит от вашего выбора размера окна (помните, что RNN плохо справляются с большими windows). Возможно, вы захотите использовать преобразование журнала, как сказал вышеупомянутый пользователь, но также это кажется несколько стационарным, поэтому я также мог видеть, что это не нужно. эквивалент языковой модели, в которой вы прогнозируете следующий результат. Итак, ваши входные данные будут предварительными значениями x и предшествующими нормализованными значениями y любого размера окна, который вы выберете, а ваше целевое значение будет нормализованным выходом на заданном временном шаге t. Просто чтобы вы знали, что 1-D Conv Net хорош для классификации, но хорош для RNN из-за временного аспекта скачков температуры.

После того, как вы обучили модель значениям x и нормализовали y values ​​и может сказать, что он на самом деле обучается (сходится), тогда вы действительно можете использовать model.predict с предварительными значениями x и нормализованными значениями y. Возьмите выходные данные и ненормализуйте их, чтобы получить фактическое значение температуры, или просто сохраните нормализованное значение и верните его в модель, чтобы получить прогноз времени + 2

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