Могу ли я использовать трансферное обучение в facebook prophet?

Я хочу, чтобы моя модель пророка предсказывала значения для каждого 10-минутного интервала в течение следующих 24 часов (например, 24 * 6 = 144 значения).

Допустим, я обучил модель огромному (более 900 тыс. Строк) .csv файлу, где строка образца ...

ds=2018-04-24 16:10, y=10
ds=2018-04-24 16:20, y=14
ds=2018-04-24 16:30, y=12

...

Поэтому я вызываю mode.fit(huge_df) и жду 1-2 секунды, чтобы получить 144 значения.

Проходит час, и я хочу настроить свой прогноз для следующих (144-6) 138 значений с учетом новых данных (6 строк).

Как я могу настроить мою существующую модель пророка, не вызывая mode.fit(huge_df + live_df) и снова подождав несколько секунд? Я хотел бы иметь возможность позвонить mode.tune(live_df) и получить мгновенный прогноз.


person Alex Kornakov    schedule 24.05.2018    source источник


Ответы (2)


Насколько мне известно, на самом деле это невозможно. Я думаю, что они используют вариант алгоритма оптимизации BFGS, чтобы максимизировать апостериорную вероятность моделей. На мой взгляд, единственный способ обучить модель - это учитывать весь набор данных, который вы хотите использовать. Причина, по которой переносное обучение работает с нейронными сетями, заключается в том, что это всего лишь инициализация веса (параметра), а обратное распространение затем выполняется итеративно в стандартной схеме обучения SGD. Теоретически вы можете инициализировать параметры параметрами предыдущей модели в случае с prophet, которые могут работать, а могут и не работать, как ожидалось. Однако я не знаю, что что-то подобное в настоящее время реализовано (но, поскольку его исходный код открыт, вы можете попробовать, надеюсь, немного сократите время сходимости).

Теперь по практическим советам. Вероятно, вам не нужны все данные, просто выберите то, что вам действительно нужно для решения данной проблемы. Например, нет смысла иметь данные за 10 лет, если у вас есть только месячная сезонность. Кроме того, в зависимости от того, насколько сильно ваши данные автокоррелированы, вы можете немного понизить дискретизацию, не теряя при этом никаких возможностей прогнозирования. Другая идея - попробовать алгоритм, который подходит для онлайн-обучения (или пакетного) - вы можете, например, попробовать CNN с расширенной сверткой.

person meow    schedule 12.05.2019

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

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

person Arjun Sehajpal    schedule 12.05.2019