Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
1 / 1 / 1
Регистрация: 03.01.2021
Сообщений: 20

Прогнозирование временного ряда

14.01.2021, 10:20. Показов 5246. Ответов 15

Студворк — интернет-сервис помощи студентам
Всем привет и заранее спасибо за помощь.
Я новичок в прогнозировании временных рядов.
Цель: Сделать прогноз на несколько шагов вперёд.
Вот есть код, я его разобрал, но всё равно не могу понять как как сделать прогноз на несколько шагов вперёд.
Подскажите пожалуйста...
(Код взят из статьи )

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
################
# Code from OP #
################
import numpy as np
def random_sample(len_timeseries=3000):
    Nchoice = 600
    x1 = np.cos(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice)))
    x2 = np.cos(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice)))
    x3 = np.sin(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice)))
    x4 = np.sin(np.arange(0,len_timeseries)/float(1.0 + np.random.choice(Nchoice)))
    y1 = np.random.random(len_timeseries)
    y2 = np.random.random(len_timeseries)
    y3 = np.random.random(len_timeseries)
    for t in range(3,len_timeseries):
        ## the output time series depend on input as follows: 
        y1[t] = x1[t-2] 
        y2[t] = x2[t-1]*x3[t-2]
        y3[t] = x4[t-3]
    y = np.array([y1,y2,y3]).T
    X = np.array([x1,x2,x3,x4]).T
    return y, X
def generate_data(Nsequence = 1000):
    X_train = []
    y_train = []
    for isequence in range(Nsequence):
        y, X = random_sample()
        X_train.append(X)
        y_train.append(y)
    return np.array(X_train),np.array(y_train)
 
Nsequence = 100
prop = 0.5
Ntrain = int(Nsequence*prop)
X, y = generate_data(Nsequence)
X_train = X[:Ntrain,:,:]
X_test  = X[Ntrain:,:,:]
y_train = y[:Ntrain,:,:]
y_test  = y[Ntrain:,:,:] 
 
#X.shape = (N sequence, length of time series, N input features)
#y.shape = (N sequence, length of time series, N targets)
print(X.shape, y.shape)
# (100, 3000, 4) (100, 3000, 3)
 
####################
# Cutting function #
####################
def stateful_cut(arr, batch_size, T_after_cut):
    if len(arr.shape) != 3:
        # N: Independent sample size,
        # T: Time length,
        # m: Dimension
        print("ERROR: please format arr as a (N, T, m) array.")
 
    N = arr.shape[0]
    T = arr.shape[1]
 
    # We need T_after_cut * nb_cuts = T
    nb_cuts = int(T / T_after_cut)
    if nb_cuts * T_after_cut != T:
        print("ERROR: T_after_cut must divide T")
 
    # We need batch_size * nb_reset = N
    # If nb_reset = 1, we only reset after the whole epoch, so no need to reset
    nb_reset = int(N / batch_size)
    if nb_reset * batch_size != N:
        print("ERROR: batch_size must divide N")
 
    # Cutting (technical)
    cut1 = np.split(arr, nb_reset, axis=0)
    cut2 = [np.split(x, nb_cuts, axis=1) for x in cut1]
    cut3 = [np.concatenate(x) for x in cut2]
    cut4 = np.concatenate(cut3)
    return(cut4)
 
#############
# Main code #
#############
from keras.models import Sequential
from keras.layers import Dense, LSTM, TimeDistributed
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
 
##
# Data
##
N = X_train.shape[0] # size of samples
T = X_train.shape[1] # length of each time series
batch_size = N # number of time series considered together: batch_size | N
T_after_cut = 100 # length of each cut part of the time series: T_after_cut | T
dim_in = X_train.shape[2] # dimension of input time series
dim_out = y_train.shape[2] # dimension of output time series
 
inputs, outputs, inputs_test, outputs_test = \
  [stateful_cut(arr, batch_size, T_after_cut) for arr in \
  [X_train, y_train, X_test, y_test]]
 
##
# Model
##
nb_units = 10
 
model = Sequential()
model.add(LSTM(batch_input_shape=(batch_size, None, dim_in),
               return_sequences=True, units=nb_units, stateful=True))
model.add(TimeDistributed(Dense(activation='linear', units=dim_out)))
model.compile(loss = 'mse', optimizer = 'rmsprop')
 
##
# Training
##
epochs = 100
 
nb_reset = int(N / batch_size)
if nb_reset > 1:
    print("ERROR: We need to reset states when batch_size < N")
 
# When nb_reset = 1, we do not need to reinitialize states
history = model.fit(inputs, outputs, epochs = epochs, 
                    batch_size = batch_size, shuffle=False,
                    validation_data=(inputs_test, outputs_test))
 
def plotting(history):
    plt.plot(history.history['loss'], color = "red")
    plt.plot(history.history['val_loss'], color = "blue")
    red_patch = mpatches.Patch(color='red', label='Training')
    blue_patch = mpatches.Patch(color='blue', label='Test')
    plt.legend(handles=[red_patch, blue_patch])
    plt.xlabel('Epochs')
    plt.ylabel('MSE loss')
    plt.show()
 
plt.figure(figsize=(10,8))
plotting(history) # Evolution of training/test loss
 
##
# Visual checking for a time series
##
## Mime model which is stateless but containing stateful weights
model_stateless = Sequential()
model_stateless.add(LSTM(input_shape=(None, dim_in),
               return_sequences=True, units=nb_units))
model_stateless.add(TimeDistributed(Dense(activation='linear', units=dim_out)))
model_stateless.compile(loss = 'mse', optimizer = 'rmsprop')
model_stateless.set_weights(model.get_weights())
 
## Prediction of a new set
i = 0 # time series selected (between 0 and N-1)
x = X_train[i]
y = y_train[i]
y_hat = model_stateless.predict(np.array([x]))[0]
 
for dim in range(3): # dim = 0 for y1 ; dim = 1 for y2 ; dim = 2 for y3.
    plt.figure(figsize=(10,8))
    plt.plot(range(T), y[:,dim])
    plt.plot(range(T), y_hat[:,dim])
    plt.show()
 
## Conclusion: works almost perfectly.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2021, 10:20
Ответы с готовыми решениями:

Вычисление коэффициентов на основе временного ряда. Нужно ли мне МЛ?
Я хочу написать простого бота, чтобы попытаться сыграть на резких падениях курса монет. Хочу поймать моменты резких падений. Может быть,...

Напишите Pandas для создания временного ряда
Напишите Pandas для создания временного ряда, используя трехмесячную частоту.

Прогнозирование временного ряда
Здравствуйте,как сделать прогноз временного ряда?

15
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
14.01.2021, 17:54
Вообще-то говоря странно. Вы ссылаетесь не на статью, а на тему на некоем форуме, где один человек приводит код, не работающий и спрашивает, как его изменить, а другие ему на это дают советы. Т.е. как бы ответы на ваш вопрос уже имеются в ответах на форуме, но вам они почему-то не подходят. И понятно, что учить тему по вопросам на форуме - очень "самоуверенно".

Меж тем имеется куча доступной информации, где все изложено подробно и последовательно.
Ну например:
https://dmkpress.com/catalog/c... 060-573-8/
https://www.piter.com/product/... -na-python

или хотя-бы опираясь на какие-то реальные статьи, в которых авторы объясняют, как именно делать предсказание временных рядов и именно с keras (хотя с моей точки зрение учиться по статьям - это тоже неправильно)
https://habr.com/ru/post/495884/
https://pythonru.com/bibliotek... ie-v-keras
http://www.bizkit.ru/2019/11/11/15143/1
https://keras.io/examples/time... recasting/
https://machinelearningmastery... hon-keras/

А так вопрос звучит примерно как "я имею чужой код, он почему-то делает не то, что я хочу. Помогите".
2
1 / 1 / 1
Регистрация: 03.01.2021
Сообщений: 20
15.01.2021, 18:45  [ТС]
Спасибо за столь высокомерный ответ, его то мне как раз таки и не хватало
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
15.01.2021, 20:16
Цитата Сообщение от Andrey001 Посмотреть сообщение
Спасибо за столь высокомерный ответ, его то мне как раз таки и не хватало
Да пожалуйста.
Не знаю, в чем вы, правда, увидели высокомерие - возможно в том, что вам подсказали, что надо прочесть что-бы понять как работать с тем инструментом, с которым вы вроде бы уже работаете. А вы наверно ожидали, что все кинуться разбираться вместо вас в какой-то скачанной в интернет непонятно где, для чего созданной и неработающей программе? Тогда бы вам наверное всего "хватило". А так да, он "высокомерен".
0
1 / 1 / 1
Регистрация: 03.01.2021
Сообщений: 20
16.01.2021, 06:14  [ТС]
Ну да, оправдывайтесь дальше
Всё что было написано вашими ручками 80% объяснение в высокомерной форме какие вы умные. Вот взгляните:
"Вообще-то говоря странно. Вы ссылаетесь не на статью, а на тему на некоем форуме, где один человек приводит код, не работающий и спрашивает, как его изменить, а другие ему на это дают советы. Т.е. как бы ответы на ваш вопрос уже имеются в ответах на форуме, но вам они почему-то не подходят. И понятно, что учить тему по вопросам на форуме - очень "самоуверенно".

А так вопрос звучит примерно как "я имею чужой код, он почему-то делает не то, что я хочу. Помогите"."

Ну а за эти 20% спасибо сказать тоже не могу, так как это тоже бесполезный текст, но по крайней мере не высокомерно:
"Меж тем имеется куча доступной информации, где все изложено подробно и последовательно.
Ну например:
Или хотя-бы опираясь на какие-то реальные статьи, в которых авторы объясняют, как именно делать предсказание временных рядов и именно с keras (хотя с моей точки зрение учиться по статьям - это тоже неправильно)"

За ссылки спасибо.

Но знаете, форум создан не для того, что бы просто обмениваться ссылками))
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
16.01.2021, 10:22
Цитата Сообщение от Andrey001 Посмотреть сообщение
Ну а за эти 20% спасибо сказать тоже не могу
Это Вы зря, коллега passant прав на 100%.

Добавлено через 2 минуты
Если хотите извращаться, это Ваше право, но считать, что на этом форуме таких большинство - как минимум наивно.
0
1 / 1 / 1
Регистрация: 03.01.2021
Сообщений: 20
16.01.2021, 10:26  [ТС]
Можно было бы просто сказать
"Этот код не работает, я разбираться с ним не хочу, но вот ссылки которые могут тебе помочь..."

Без всего этого:
"Вообще-то говоря странно. Вы ссылаетесь не на статью, а на тему на некоем форуме, где один человек приводит код, не работающий и спрашивает, как его изменить, а другие ему на это дают советы. Т.е. как бы ответы на ваш вопрос уже имеются в ответах на форуме, но вам они почему-то не подходят. И понятно, что учить тему по вопросам на форуме - очень "самоуверенно".

"А так вопрос звучит примерно как "я имею чужой код, он почему-то делает не то, что я хочу. Помогите"."

Толку от этого ноль zero, и после этого я ещё должен говорить спасибо?
А вот за ссылки действительно спасибо
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
16.01.2021, 10:35
Andrey001, а как бы вы сами ответили на свой вопрос? Он вообще разве подразумевает короткого ответа?
Ваш вопрос совершенно неконкретен. Ответы могут быть только такие же.
Если вы чего-то не понимаете - берите учебники, книги или другие материалы, читайте и разбирайтесь самостоятельно.
Другого способа получать знания еще не придумали. "Спасение утопающих - дело рук самих утопающих!" (c)
0
1 / 1 / 1
Регистрация: 03.01.2021
Сообщений: 20
16.01.2021, 11:22  [ТС]
Я бы ответил так
"Этот код не работает, я разбираться с ним не хочу, но вот ссылки которые могут тебе помочь..."

Добавлено через 11 минут
Я бы ответил так:
"Этот код не работает, я разбираться с ним не хочу, но вот ссылки которые могут тебе помочь..."

На счёт "Если вы чего-то не понимаете - берите учебники, книги или другие материалы, читайте и разбирайтесь самостоятельно."
Вопрос: Зачем тогда нужен форум?

Предложение: Не заходите на него сами тогда, раз вам всё понятно и вы не собираетесь помогать никому, ведь по вашим словам "Спасение утопающих - дело рук самих утопающих!".

Вроде бы умные люди, но такие высокомерные как капризные дети, которых каждый день хвалят "ой какой ты умный")

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

Слышали когда нибудь фразу "Люди боятся задавать вопросы, потому что они боятся что вопрос будет глупый".
В итоге ни вопроса ни ответа, вот это как раз таки и происходит из-за таких высокомерных умников как простите, "Вы"
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
16.01.2021, 17:08
Повторю - очень странная позиция.

"Предложение: Не заходите на него сами тогда, раз вам всё понятно и вы не собираетесь помогать никому, ведь по вашим словам "Спасение утопающих - дело рук самих утопающих!".

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

Если люди задают конкретный вопрос - то глупым он быть не может, он может быть простым или сложным. А если вопрос в том, что кто-то приходит и говорить "я разбираться сам не хочу, усилий к этому не прилагал и прилагать не желаю, но вы мне все тут объясните" - то это действительно выглядит несколько.... глупо наивно.

И да, "Другого способа получать знания еще не придумали". Еще говорят - нельзя научить, можно помочь научиться, но только тому, кто этого захочет сам. Научиться - значит разобраться в теме.
Ну, а что вы сделали? Где-то на каком-то форуме взяли программу, пришли на другой форум спросить почему она не работает. А сами вы попробовали разобраться? Или "учебники, книги или другие материалы" - не наш путь?

"Вопрос: Зачем тогда нужен форум?"
Точно не для того, что бы заменить собой "учебники, книги или другие материалы". Не хотите с этим соглашаться - ваш выбор. Только на подсказках знаний не наберешь.

"Ну а за эти 20% спасибо сказать тоже не могу, так как это тоже бесполезный текст,"
да мне как бы ваша благодарность и не очень. Одна надежда - кто-нибудь когда-нибудь более стремящийся именно к знаниям, зайдет на тему, увидит ссылочки, пройдет по ним, прочитает, разберется и станет умнее. Квалифицированнее. Успешнее. И польза для таких людей для меня гораздо важнее, чем ваша (не)благодарность.
Удачи.
1
1 / 1 / 1
Регистрация: 03.01.2021
Сообщений: 20
16.01.2021, 17:46  [ТС]
Ну так ответили бы по проще "Этот код не работает, я разбираться с ним не хочу, но вот ссылки которые могут тебе помочь..."

Вырвали текст (который являлся комментарием не к вашему сообщению) из контекста и привязали его к своему, мдэ .
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
17.01.2021, 02:31
Если честно то по ссылке бред еще тот даже в самом начале задания.
Еще больше я не верю в экстраполяцию временных рядов в корне.
“чтобы предсказать несколько временных рядов выходных данных на основе нескольких временных рядов ввода.”
Похоже парниша скачал котировки форекс пару валют и думает что можно предсказать на этой основе. Дальше прикол еще забавней, взяли две синусоиды и обучают на них могучие нейросети демонстрируя нулевую ошибку…мрак.
Ладно кусок графика …ладно 1 значение примерно…даже направление графика не предсказать по факту. Иначе бы лотереи, ставки, форекс и прочий развод эксперты бы хавали на завтрак но нет…могучий рандом умножает на ноль все их предсказатели и заумные нейросети. Понятия не имею какое прикладное значение самому термину «Прогнозирование временного ряда”
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
17.01.2021, 11:29
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Если честно то по ссылке бред еще тот даже в самом начале задания.
Это вы понимаете, потому что прочитали с пяток книг на эту тему. Ну и я догадываюсь - пролистал полторы :-).
А большинство посетителей форума - не только этого, но и многих других - абсолютно уверены, что форумы на то и существуют, что-бы не читать "учебники, книги или другие материалы". И что именно с книг надо начинать обучение. Всегда, везде и любое. И сильно обижаются, если им на это указывают.
А уж когда дело касается Форекса - тут вообще "ховайся".
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
17.01.2021, 13:22
Цитата Сообщение от passant Посмотреть сообщение
когда дело касается Форекса
Злые Вы все, человек серьезно надеялся, что форумчане ему на всю жизнь золотую жилу откроют, а Вы книжки советуете.
Как я его понимаю........
2
1 / 1 / 1
Регистрация: 03.01.2021
Сообщений: 20
18.01.2021, 12:54  [ТС]
Очень смешно смотреть на то, как другие люди строят какие то догадки "он наверное думал что...", не подкреплённые абсолютно ничем)
При чём тут форекс, и как вы пришли к такому выводу?)
0
18.01.2021, 13:08
 Комментарий модератора 

3. Правила поведения на форуме.
3.1 Уважительно относитесь к другим участникам форума.
3.2 Не втягивайтесь в конфликты между пользователями: в этом случае Вы станете их участником и понесете равную ответственность с зачинщиками конфликта.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2021, 13:08
Помогаю со студенческими работами здесь

Прогнозирование временнОго ряда
У меня есть временный ряд 10, 50, 100, 10, 10,10,100,50,10,10 , мне нужно проанализировать начиная с первого ряда связь между рядами ,...

Прогнозирование временного ряда
Здравствуйте! Изучаю прогнозирование временного ряда с признаками. Для учета последовательности будет использоваться рекуррентная...

Обработка, прогнозирование временного ряда из единиц и нулей
Здравствуйте, Прошу опытных людей подсказать направления поиска всего, связанного с анализом-обработкой-прогнозированием временного ряда...

График временного ряда
Добрый день,не шарю в эксель, може у кого есть схожие задания, буду признателен, спасибо В таблице приведены данные об объеме экспорта...

Обработка временного ряда
Ищу единомышленников для написания алгоритма. Анализируем кривую. По умолчанию она растет но иногда бывает резкий спад. Нужно...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru