Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
1

Сделать прогноз на заданный временной интервал в будущем

01.07.2020, 11:52. Показов 1243. Ответов 16
Метки нет (Все метки)

Добрый день.
У меня есть модель:
Python
1
2
3
4
5
6
look_back = 3
model = Sequential()
model.add(LSTM(4, input_shape=(look_back, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=20, batch_size=1, verbose=2)
Здесь trainX и trainY уже сформированны с помощью входного набора данных до текущего момента времени.
Теперь мне надо сделать предсказание на следующий период времени, который ещё не наступил:
Python
1
model.predict(...)
1. Каким образом мне в predict передать даты start_date и end_date. Неважно, в миллисекундах или в нормальном формате?
2. Каким образом подсчитать вероятности спрогнозированных значений данных при соответствующих значениях времени?
Прочитал документацию, в predict надо передавать массив данных, а не 2 даты. Т.е. получается, что подходит такая модель чисто для проверки, но никак не для предсказания в реальном времени? Ты можешь видеть, что LSTM достаточно эффективны, но в режиме реального времени спрогнозировать нельзя, ибо это не заложено разработчиками соответствующих библиотек Python. Нормально так.
1

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2020, 11:52
Ответы с готовыми решениями:

Перевести временной интервал, заданный в минутах, в часы, минуты и секунды
Задание: Написать программу пересчета величины временного интервала, заданного в минутах, в...

Перевести временной интервал, заданный в минутах в вид: сутки, часы, минуты
Здравствуйте. Не получается довести "до ума" задачку: Программа переводит временной интервал,...

Как сделать событие, происходящее через заданный интервал времени, например 5 сек.?
Просто subj, собственно.

Если значения матрицы не входят в заданный интервал, сделать номировку, чтобы они туда вошли
Пользователь задаeт с клавиатуры количество строк и столбцов двумеpного массива и интервал ....

16
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
01.07.2020, 15:21 2
1. Ну, предположим, что мы проинтуичили и догадались, что вы используете Keras (а и вправду, зачем это явно писать? Или вы так проверяете нашу компетентность?).
2. В fit в качестве данных вы же задаете не start_date и end_date, а вполне себе сформириованные trainX, trainY - наборы. Вот точно такие же естественно для predict тоже задавать данные, предварительно их подготовив.
3. Вывод о невозможности использовании LSTM сетей для предсказания несколько - как бы помягче сказать - странен, тем более, что источников, описывающих применение этих сетей именно для предсказания, а не проверки (кстати - проверки чего? так и не понял) - более чем достаточно:
How to Develop Multi-Step LSTM Time Series Forecasting Models for Power Usage
3 Steps to Forecast Time Series: LSTM with TensorFlow Keras
Predicting Stock Price with LSTM
и т.д
Про использование в реальном времени - тоже несколько странное заявление. Предсказание в реальном времени - этот по сути предсказание на один шаг вперед. Т.е. набрали данные - сделали прогноз на шаг вперед - переучили модель на расширенных данных (если надо)- снова прогноз на шаг вперед. На каком из шагов этой цепочки вы увидели ограничение, делающее работу в он-лайн режиме невозможном?
О том, что разработчики такого инструмента что-то не додумали и "не включили" - можно делать заявление после того, как вы сами глубоко разберетесь с темой. До тех пор разумнее находиться на позиции, "я не понимаю, как именно с помощью инструмента можно что-то реализовать". Иначе это выглядит просто смешно.
1
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
12.07.2020, 14:09  [ТС] 3
Прочитал разные источники, в том числе и то, что на ссылках. Везде вижу только
Python
1
model.predict(testX)
Всё равно везде передаются в predict уже известные данные, на основании которых потом и сравнивается предсказание с тем, что было в реале.
Однако, в режиме реального времен никакого testX нет и быть не может, ибо речь идёт о будущем, которое не наступило. Однако какой-то массив в predict всё равно надо передать.
И поэтому я и задаюсь вопросом, как с такой моделью работать в онлайн-режиме и что нужно передавать в predict?
0
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
12.07.2020, 16:35 4
Плохо прочитали "разные источники". Впрочем, думаю, проблема именно в том, что вы читаете РАЗНЫЕ источники, вместо того, что-бы взять один, но полный - лучше всего книгу, еще лучше даже не по нейросетям, а методам прогнозирования и временным рядам - и по ней разобраться что да как. Потом разобраться в нейросетях (опят-же по книге, а не по отрывочним статейкам в интернет), а уж потом приступать к работе.
Но это лирика. А по факту.
Прогнозирование во временных рядах делется (если это не панельные данные) по единственной независимой переменной - времени. Причем даже не по самому времени, а по "тикам". Конечно никакого тестировочного testX при этом нет. Вы сами задаете те "тики" на которые хотите сделать прогноз.
В режиме он-лайн с такой моделью работать элементарно. Цикл состоит в следующем. Делаете прогноз на то количество "тиков", которые вас интересуют, потом получаете реальные данные в эти тики, сравниваете их с прогнозными. Если анализ показывает, что прогноз статистически не значимо отличается от реальных данных - цикл повторяется "как есть". Если различия статистически значимы - надо строить новую модель, используя предыдущие временные тики и значения, которые получены.
0
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
13.07.2020, 09:46  [ТС] 5
Так что в таком случае передавать в predict? Массив [1,...,N], где N - количество тиков?

P.S.: читал я и книги, но там в predict всё равно testX передают. Нет там примеров работы в режиме реального времени
0
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
13.07.2020, 12:43 6
Вы знаете, становиться даже не интересно. Вам что-то советуешь, но вы не слушаете, остаетесь на своей волне и даже не понимаете, о чем речь. Если читали книги, то явно их не поняли. Причем вы заявляете, что там "все равно" все делают неправильно. И совершенно безаппеляционно: "Нет там примеров работы в режиме реального времени".Вы и вправду себя считаете "первопроходцем" прогнозирования в реальном времени?

Я не даром вам советовал начать с азов! Но и этот совет вы пропускаете мимо ушей. Еще раз, даже не книги, которые надо "думать, а не читать", а облегченные версии из интернет, которые можно тупо копипастить (я не призываю это делать, кстати):
Открываем самые первые ссылки в Гуугл и внимательно смотрим, а что же там передают при форекастинге в качестве параметров. И о чудо, никаких тебе testX:
https://machinelearningmastery... eat-sheet/

Потом силимся понять, а зачем вообще используют деление выборки на обучающую и тестовую. И с изумлением "открываем" (хотя это черным по белому написано в ЛЮБОЙ книге по временным рядам), что это делают не для реального прогноза, а только что-бы проверить адекватность модели.

Проверяем, а что-же там не додумали разработчики Keras.
https://machinelearningmastery... recasting/
Оказывается все они додумали и даже описали. Но на языке, понятном только тем, кто идет нормальным путем, а не прыгая через пять ступеней.
Хотите - прислушивайтесь к совету, хотите - набивайте шишки дальше, обвиняя всех в некомпетентности.
Удачи.
0
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
13.07.2020, 13:02  [ТС] 7
Об этом и речь. Для предсказаний в режиме реального времени используются AutoReg, ARMA, ARIMA и т.д. А Sequential только для поверки адекватности модели.
Значит, мне фактически делать что-то из AutoReg, ARMA, ARIMA и т.п., и выбирать наиболее оптимальную
0
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
13.07.2020, 13:05 8
А Sequential только для поверки адекватности модели. - вывод опять безаппеляционен и ошибочен. Продолжайте гадать.
0
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
13.07.2020, 13:09  [ТС] 9
В примере по Sequential передаётся x_input, который как раз и является testX фактически. Но там и пример на проверку адекватности
0
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
13.07.2020, 13:45 10
Это типа вы так тонко троллите? Еще раз. Наверное - последний. Чем отличается testX при использовании в predict от использовании любой другой последовательности, передаваемой в качестве входа в predict? И зачем вообще выборку разбивают на обучающую и тестовую? И чем работа на тестовых данных отличается от предсказания?
(Подсказка - ответ на первых страницах ЛЮБОЙ книги по временным рядам).
0
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
13.07.2020, 14:20  [ТС] 11
Подставил вместо testX в predict массив из дат в миллисекундах. В результате:
Python
1
2
3
4
5
6
7
8
9
10
Traceback (most recent call last):
  File "D:\Prediction\PrPred.py", line 121, in <module>
    trainRealPredict = model.predict(df0.date.to_numpy())
  File "I:\Python\Python36\lib\site-packages\keras\engine\training.py", line 1441, in predict
    x, _, _ = self._standardize_user_data(x)
  File "I:\Python\Python36\lib\site-packages\keras\engine\training.py", line 579, in _standardize_user_data
    exception_prefix='input')
  File "I:\Python\Python36\lib\site-packages\keras\engine\training_utils.py", line 135, in standardize_input_data
    'with shape ' + str(data_shape))
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (1327, 1)
Так что не всё так просто с Sequential, как кажется на первый взгляд
0
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
13.07.2020, 15:09 12
Цитата Сообщение от phoenix_css Посмотреть сообщение
Подставил вместо testX в predict массив из дат в миллисекундах. В результате:

Так что не всё так просто с Sequential, как кажется на первый взгляд
Опять все вокруг не правы и не умеют работать? Прям какой-то заговор против вас.
Подставили, да не то, что надо. А разобраться - уже очевидно - не ваш путь. Проще сваливать все на нерадивых разработчиков.
Удачного изобретения велосипеда.
0
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
13.07.2020, 17:21  [ТС] 13
Если бы я мог разобраться, что подставить, я бы и не задавал вопросы.
Если бы я хотя бы в одном источнике прочитал, как использовать Sequential для реального прогноза, я бы вопросы не задавал.
А пока по Sequential я видел только примеры проверки адекватности модели.

То, что для вас само собой разумеющееся, для меня вообще не очевидно и не понятно. И пока то, что написано в разных источниках, ясности не вносит.

Добавлено через 1 час 50 минут
И я бы разобрался, если бы в литературе и статьях увидел ответы на свои вопросы. Но, как я понял из прочитанного, в том числе и документации по Keras, можно быть толковым разработчиком, но не способным внятно объяснить суть своих разработок
0
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
13.07.2020, 17:48 14
Ну, я бы честно говоря удивился, если бы опять не увидел обвинения в сторону разработчиков, "не способных" на что-то там.
Понимаете, невозможно второкласснику, изучившему четыре операции арифметики, "толково" объяснить что такое интеграл. И тут проблема не в "неспособных" учителях будет. А разработчики Keras очень внятно и толково объяснили не тем, кто верит в то, что "он БЫ разобрался, если БЫ..", а тем, кто изучИл хоть немного теории. Но у каждого "второклассника", как и у каждого двоечника, всегда виноватым будет бестолковый учитель.
0
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
13.07.2020, 18:43  [ТС] 15
Причём тут теория, если речь идёт о том, что необходимо передать в качестве массива в функцию predict в случае Sequential модели для предсказания будущих значений, а не для проверки адекватности модели?
Более того, я попробовал разные варианты с массивом временных тиков, записанных в миллисекундах. Применял reshape.
Python
1
dfdate = np.reshape(df0.date, (df0.date.shape[0], df0.date.shape[1], 1))
Не помогает и это.
0
325 / 291 / 54
Регистрация: 09.01.2018
Сообщений: 986
13.07.2020, 19:00 16
Причём тут теория, если речь идёт о том, что необходимо передать в качестве массива в функцию predict
Да, в который раз убеждаюсь. Знание формата fit или predict НЕ делает человека специалистом в ML. Но НЕзнание теории, в частности, неспособность ответить после трех упоминаний "И зачем вообще выборку разбивают на обучающую и тестовую? И чем работа на тестовых данных отличается от предсказания?" точно не дает человеку даже в этих самых форматах разобраться.

Не помогает и это.
Вам - не помогает. Другим - помогает. Угадайте - почему (только не говорите в очередной раз, что разработчики Keras то ли не продумали такую возможность, то-ли не способны внятно объяснять.)

Ладно, таки уже надоело. Не моя задача наставлять вас ну путь истинный. Надеюсь, если кому такая задача попадется - он все поймет. Так как выше уже ВСЕ что можно было (ну, кроме краткого курса по Time Series Forecasting, конечно) уже сказано.
Еще раз удачи.
0
1 / 1 / 0
Регистрация: 09.09.2017
Сообщений: 59
16.07.2020, 11:44  [ТС] 17
Теперь подставил trainX, в который засунул все данные за предыдущие периоды времени + текущие. Таймфрейм - 5 минут.
В итоге создаётся такое впечатление, что данные предсказаны не на будущий и на предыдущий период времени, хотя с другой стороны первые 12 тиков вроде как более менее приемлемо предсказано
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2020, 11:44

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Временной интервал....
Мне надо решить задачу, а я чет даже не понимаю что надо сделать в этой задаче.... Временной...

Временной интервал
Привет, подскажите как реализовать такое: есть промежуток времени например с 17:00 до 04:00 мне...

Запрос на временной интервал
Добрый день, уважаемые эксперты, есть две таблицы. Одна с ценами (Prices), другая с заказами...

Php временной интервал
Здравствуйте, нужно решить вот что, Если проходит определенный временной промежуток, то выполнить...

установить временной интервал
Здравствуйте. Подскажите пожалуйста как правильно установить временной интервал, я хочу сделать что...

требуется снять временной интервал действия
Добрый день! Есть программа на с## - требуется снять временной интервал действия


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.