Классификация последовательностей Tensorflow — LSTM

#python #tensorflow #lstm #sequence

#python #tensorflow #lstm #последовательность

Вопрос:

У меня есть фрейм данных, который выглядит следующим образом:

 id.   date           mycol       label

1.    01/12/2019      c1             1
1.    03/12/2019      c2             1
1.    04/12/2019      c3             1
2.    01/12/2019      c1             0
2.    03/12/2019      c5             0 
3.    15/01/2020       ..            1
4.     ...                           1
.
.
  

Метка всегда одинакова для одного и того же идентификатора, и это проблема двоичной классификации. Я хотел бы предсказать метку на основе mycol только для каждого идентификатора, и мне нужно сделать прогнозы на 5 месяцев вперед. Я думаю, что мне следует использовать LSTM, но проблема заключается в датах и в том, как настроить последовательности, поскольку я раньше не сталкивался с такого рода проблемами, и я только начинаю с LSTM. Группировка по идентификатору дает очень большие списки значений mycol для каждой строки. Я не уверен, как различать эти значения в терминах месяцев / недель, и должен ли я вообще это делать или я должен просто оставить их такими в 1 огромном списке для каждой строки. Помощь была бы весьма признательна.

Комментарии:

1. Я думаю, вам следует подойти к проблеме как к проблеме временных рядов. Да, LSTM может решить эту проблему, но попробуйте использовать более простую модель, такую как ARIMA или некоторую вариацию ARIMA

2. Есть ли у вас какие-либо примеры того, как это может работать?

Ответ №1:

Ваша первая входная последовательность должна быть [c1, c2, c3], label — 1,

второй — [c1, c5], метка — 0,

Длина последовательности не имеет значения (вам не нужно добавлять отступы). LSTM узнает, как изменять свои веса состояний на основе новых входных данных (элемент последовательности).

Комментарии:

1. Ваш первоначальный вопрос — задача классификации: у вас есть последовательность в качестве входных данных и метка в качестве выходных данных. Пожалуйста, уточните — как вы собираетесь прогнозировать на 6 месяцев вперед: вы хотите предсказать mycol, а не label? Если это так — вам нужно обучить другой LSTM для прогнозирования mycol в течение 6 месяцев, а затем передать предсказанную последовательность в первый LSTM для классификации.

2. Если ваша метка влияет на mycol — было бы более эффективно обучить один LSTM для обеих целей (потому что LSTM имеет два выхода). Вам нужно использовать потери, состоящие из двух потерь (отдельные потери для каждой цели)

3. У меня нет примера кода. Вы должны использовать BinaryCrossentropy для классификации последовательностей и SparseCategoricalEntropy для прогнозирования следующего элемента