#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 событий