Форум программистов, компьютерный форум, киберфорум
Python: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583

Нейронные сети и прогнозирование

02.08.2020, 19:08. Показов 4301. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решила попробовать сделать нейронную сеть для прогнозирования продаж по временному ряду. Имея данные о продажах по месяцам
Но есть сомнение, что я на правильном пути. Подскажите пожалуйста, как правильно сети подать данные, чтобы она могла предсказать , например, данные на следующей месяц ? По возможности помогите дописать код ?
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
import numpy
import pandas
import math
import time
import sys
import datetime
import matplotlib.pyplot as ma
import keras.models as km
import keras.layers as kl
import sklearn.preprocessing as sp
 
numpy.random.seed(42)
 
"""
Загрузка CSV файла временного ряда
"""
 
 
def ts_load(filename, value_name, date_name, date_parser):
    csv = pandas.read_csv(filename)
    csv.index = date_parser(csv[date_name])
    for x in csv.columns.values.tolist():
        if x != value_name:
            del csv[x]
    return csv
 
 
"""
нормализация данных
"""
 
 
def ts_normalize(ts):
    scaler = sp.MinMaxScaler(feature_range=(0, 1))
    return scaler.fit_transform(ts.values), scaler
 
 
"""
обратная операция для нормализации (инверсия)
"""
 
 
def ts_undo_normalization(ts, scaler):
    return scaler.inverse_transform(ts)
 
 
"""
Разбиение данных на обучающую и тестовую выборки
"""
 
 
def ts_split_train_test(ts, ts_split_train_test=0.8):
    ts_len = len(ts)
    train_end = (int)(ts_len * ts_split_train_test)
    train, test = ts[:train_end], ts[train_end + 1:]
    return train, test
 
 
"""
Создание сети LSTM RNN.
"""
 
 
def network_create(num_lstm, loss="mse", optimizer="sgd"):
    # Layer based network
    network = km.Sequential()
    # Hidden layer is made from LSTM nodes
    network.add(kl.LSTM(num_lstm, activation="sigmoid", input_shape=(1, 1)))
    # Output layer with one output
    network.add(kl.Dense(1))
    network.compile(loss=loss, optimizer=optimizer)
    return network
 
 
"""
Обучение LSTM RNN.
"""
 
 
def network_fit(network, train_data, target_data, num_training_iterations):
    return network.fit(train_data, target_data, epochs=num_training_iterations, batch_size=1, verbose=0)
 
 
"""
Изменение набора данных временных рядов для LSTM RNN 
в [batch size; timesteps; input dimensionality] формат.
"""
 
 
def dataset_reshape_for_network(dataset):
    return dataset.reshape((dataset.shape[0], 1, dataset.shape[1]))
 
 
"""
Создание набора данных для обучения LSTM RNN.
В основном это создает два списка, первый с обучающими значениями, 
а второй с отстающими целевыми значениями.
"""
 
 
def dataset_create(ts, num_lags=1):
    x = []
    y = []
    for i in range(len(ts) - num_lags - 1):
        x.append(ts[i:(i + num_lags), 0])
        y.append(ts[i + num_lags, 0])
    return numpy.array(x), numpy.array(y)
 
 
"""
Предсказание новых значений с LSTM RNN.
"""
 
 
def network_predict_new_values(network, data):
    return network.predict(data)
 
 
"""
Загрузка временных рядов из файла CSV,
создание LSTM RNN с произвольным числом ячеек, обучение его данным и предсказание новых значений.
"""
 
 
def rnn(ts_name, num_lstm, iterations,
        train_test_ratio, value_column_name, timestamp_column_name):
    ts = ts_load(ts_name,
                 value_column_name,
                 timestamp_column_name,
                 lambda x: pandas.to_datetime(x))
    predicted_values = []
 
    # Sigmoids are sensitive to large scaled values, normalize them to <0,1>
    ts, scaler = ts_normalize(ts)
    ts_train, ts_test = ts_split_train_test(ts, train_test_ratio)
 
    # Create dataset from TS
    train_dataset_x, train_dataset_y = dataset_create(ts_train)
    test_dataset_x, test_dataset_y = dataset_create(ts_test)
 
    # The input data for our network needs to be
    # provided in [batch size; timesteps; input dimensionality] format
    train_dataset_x = dataset_reshape_for_network(train_dataset_x)
    test_dataset_x = dataset_reshape_for_network(test_dataset_x)
 
    # Create and fit LSTM network
    start_time = time.time()
    network = network_create(num_lstm)
    network_fit(network, train_dataset_x, train_dataset_y, iterations)
    print("TIME ELAPSED ", time.time() - start_time)
 
    predicted_unscaled = network_predict_new_values(network, test_dataset_x)
    predicted_scaled_back = ts_undo_normalization(predicted_unscaled, scaler)
    test_scaled_back = ts_undo_normalization(ts_test, scaler)
 
    # Present results
    test_result = []
    predicted_result = []
    score = 0
    iterations = 0
 
    print("Real value;predicted value")
    for x in zip(test_scaled_back, predicted_scaled_back):
        test_value = x[0][0]
        predicted_value = x[1][0]
        print("%f,%f" % (test_value, predicted_value))
        test_result.append(test_value)
        predicted_result.append(predicted_value)
        score += pow(test_value - predicted_value, 2)
        iterations += 1
 
    print("MSE ", score / iterations)
 
    ma.plot(test_result, color="blue")
    ma.plot(predicted_result, color="red")
    ma.show()
 
 
def main():
    rnn(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]), float(sys.argv[4]), sys.argv[5], sys.argv[6])
 
 
if __name__ == "__main__":
    main()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2020, 19:08
Ответы с готовыми решениями:

Прогнозирование нейронной сети с нулевой ошибкой
Написал незамысловатую программку нейронной сети. Используется обычное прямое распространение. Необходимо вывести выходное, эталонное...

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

Как в загрузить большое количество фотографий для обучения нейронной сети
Всем доброго времени суток! Подскажите, пожалуйста, как в Python 3 загрузить большое количество фотографий для обучения нейронной сети в...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.08.2020, 19:08
Помогаю со студенческими работами здесь

Keras. Нейронные сети
Я использую keras для обучения сверточной нейронной сети. Обучаю её распознавать цифры с набора mnist. Распознает в принципе нормально, но...

Нейронные сети. MNIST
Есть код нейронной сети, которая распознает рукописные ЦИФРЫ: import numpy from keras.datasets import mnist from keras.models...

seq2seq нейронные сети
Добрый день. Я новичок в нейронных сетях, но тут появилась задача, что без них никуда. Необходимо создать нейронную сеть, которая сокращала...

Pybrain, нейронные сети
Прочитал эту статью https://habrahabr.ru/post/148407/ .Описано все понятно, но возникли некоторые трудности. Создал сеть, обучил её...

Сверточные нейронные сети
Добрый день, при запуске обучающей выборке выдается ошибка слоя сети: Input 0 of layer &quot;sequential&quot; is incompatible with the...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru