модель машинного обучения разные входные данные

#machine-learning #deep-learning #neural-network

#машинное обучение #глубокое обучение #нейронная сеть

Вопрос:

у меня есть набор данных, набор данных состоит из: Дата , идентификатор (идентификатор события), число_оф_активностей, running_sum (running_sum — это текущая сумма действий по идентификатору). это часть моих данных :


     date       |   id (id of the event)   |   number_of_activities  |    running_sum  |

   2017-01-06  |   156                    |                   1     |             1   |

   2017-04-26  |   156                    |                   1     |             2   |

   2017-07-04  |   156                    |                   2     |              4  | 

   2017-01-19  |   175                    |                   1     |             1   |

   2017-03-17  |   175                    |                   3     |             4   |

   2017-04-27  |   221                    |                   3     |             3   |

   2017-05-05  |   221                    |                   7     |             10  |

   2017-05-09  |   221                    |                   10    |             20  |

   2017-05-19  |   221                    |                   1     |             21  |

   2017-09-03  |   221                    |                   2     |             23  |
  

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

Ответ №1:

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

Рекуррентный уровень принимает временные ряды в качестве входных данных и выводит вектор, который содержит сжатую информацию обо всех временных рядах. Итак, давайте возьмем событие 156, которое состоит из 3 шагов: событие — это ваши функции, которые имеют 3 временных шага. Каждый временной шаг имеет разное количество действий (или функций). Чтобы решить эту проблему, просто используйте максимальное количество встречающихся функций и добавьте значение заполнения (чаще всего просто ноль), чтобы все они имели одинаковую длину. Тогда у вас есть форма, которая подходит для рекуррентной нейронной сети (где LSTM в настоящее время являются хорошим выбором)

Обновить

Вы сказали в комментариях, что использование заполнения не подходит для вас, позвольте мне попытаться убедить вас. LSTM хороши в ситуациях, когда длина последовательности отличается от длины. Однако для того, чтобы это работало, вам также необходимо иметь более длинные последовательности, из которых модель может изучать свои шаблоны. Что я хочу сказать, когда некоторые из ваших последовательностей имеют всего несколько временных шагов, например 3, но у вас есть другие с 50 и более временными шагами, модели может быть сложно правильно их предсказать, поскольку вам нужно указать, какой временной шаг вы хотите использовать. Итак, либо вы по-разному подготавливаете свои данные для четкого вопроса, либо углубляетесь в тему, используя SequenceToSequence Learning, который очень хорош при вычислении последовательностей с разной длиной. Для этого вам нужно будет настроить сеть кодировщик-декодер.

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

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

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

1. здравствуйте, большое вам спасибо за ваш ответ, но я на самом деле спрашивал, есть ли способ сделать входные данные динамическими, чтобы lstm мог их принимать, заполнение или сокращение серии для меня не вариант, потому что с заполнением у меня огромная разница между некоторыми сериями, которая добавляет невероятное количестводанных и отбрасывает мои прогнозы, и с их уменьшением я не получаю то, что хочу, на самом деле это учебник, который я использовал для этого, если кто-нибудь смотрит: machinelearningmastery.com /…

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

3. длина строк: например: событие с идентификатором 156 имеет 3 события, а событие с идентификатором 221 имеет 5 событий