Дата / Время кодирования (циклические данные) для нейронных сетей

12

Как закодировать дату и время события для нейронной сети?

У меня нет непрерывных временных рядов, но есть некоторые события с датой и временем, и я анализирую какой-то интерес. Этот интерес различается по утрам и вечерам, а также по будням, летом и зимой, перед Рождеством, Пасхой и т. Д. И сами события имеют сильное неравномерное распределение во времени (больше днем, чем ночью, некоторые виды чаще в течение недели, некоторые больше в выходные дни).

Я пытался закодировать его как число недели в году, день недели 1-7 и час дня. Но игра с разреженным автоэнкодером создала у меня впечатление, что мои данные не имеют никакого смысла для нейронной сети, они не могут даже воспроизвести что-либо рядом со входом, даже с большим скрытым слоем. Ни в качестве категориальных 0-1, ни в качестве нормированных значений.

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

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

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

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

РЕДАКТИРОВАТЬ: Как-то связаны с циклическим видом данных, некоторые недавние вопросы, такие как

Какие статистические тесты являются обоснованными с этим набором данных времени суток?

flaschenpost
источник

Ответы:

7

Я искал ответ на похожую проблему и наткнулся на эту ветку. Идея синусоидального кодирования рассматривается в этом блоге:

Кодирование циклических непрерывных функций - 24 часа

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

Жоао Пауло Фигейра
источник
Интересно, как это можно использовать stackoverflow.com/questions/59653862/… - особенно, когда есть время, функции.
user4581
1

Вы можете попытаться представить время в виде большой матрицы, то есть 365 на 24, чтобы представить дни года и часы дня, а затем «развернуть» это в вектор 1 на 8760. Тогда время будет соответствовать позиции в этом векторе, а значение в этой позиции будет значением в это время.

babelproofreader
источник
2
Вы пробовали и преуспели с такой кодировкой? Я был бы удивлен, если бы Нейронная Сеть «узнала» точные позиции воскресного утра в этой кодировке. Но удивлять наивного - это одна из сильных сторон нейронных сетей, поэтому я бы не стал ставить против этого свой скотч. ;-)
флешпост
Это может быть полезно, если вы хотите обнаружить циклические события к одному и тому же часу в разные годы, но мне кажется, что корреляция будет очень слабой. Я вижу более высокую вероятность корреляции между одним и тем же часом в неделю или одним и тем же часом в день для большинства данных временных рядов.
thekingoftruth
1

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

между утра и вечера, и отличается в будние дни, а также между летом и зимой, ...

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

Например...

Если у вас есть тенденция, при которой что-то интересное происходит около полудня каждый день, то создайте функцию из которая описывает часы в дне. Теперь сеть научится запускать около 12. Сравните это с тем случаем, когда эти же данные кодируются в виде часов в неделю . Теперь сеть должна попытаться научиться срабатывать на что значительно сложнее.1..168 12 , 36 , 60 ...1..241..16812,36,60 ...

CatsLoveJazz
источник
Да, это была моя первая идея. Но круговая концепция времени (23:59 сопровождается 00:00) затем скрывается, и меня беспокоит еще один момент - скачок между, казалось бы, целыми числами - событие в 09:55 очень похоже на 10:05, но утром 06:10 сильно отличается от 06:55. Я мог бы представить, чтобы искать центры времени (оптика или тому подобное?), А затем измерять и давать расстояние до этих центров. Итак, 04:30 утра самая глубокая ночь, тогда как 05:30 более "утренняя", но совсем не похожая на вечер.
флешпост
1
Ну, в этом случае вы можете попробовать закодировать как синусоиду или косинус, или фактически оба.
CatsLoveJazz