Вопрос или проблема
У меня есть модель LSTM с одним слоем и 300 временными рядами, которая пытается предсказать следующее значение для одного временного ряда, основываясь на прошлых 12 значениях из 300 временных рядов. 56 – это количество срезов длины 12 в обучающем наборе
Входные данные для обучения -> форма выходных данных:
- 56,12,300 -> 56,
Входные данные для 1 предсказания -> форма выходных данных:
- 1,12,300 -> 1,
Проблема возникает из-за масштаба значений. Я пытаюсь нормализовать значения, но не знаю, следует ли масштабировать только обучающий набор данных или весь набор данных. И как денормализовать одно скалярное значение (предсказанный вывод)
Вам следует нормализовать после разбиения на x и y. Нет необходимости масштабировать целевую переменную.
Попробуйте на этой строке
Я использовал 5000 образцов. 56 может быть недостаточно
sample = 5000
seq_len = 12
features = 300
data = np.arange(0,sample*seq_len*features+1,1) #data.shape
x = data[:-1].reshape((sample,seq_len,features))
y = data[seq_len*features::seq_len*features] #.shape, y.shape
model = Sequential()
model.add(layers.GRU(100, return_sequences=True, input_shape=(seq_len,features)))
model.add(layers.GRU(100, return_sequences=False))
model.add(layers.Dense(1000, activation='relu'))
model.add(layers.Dense(1, activation='linear'))
# Масштабирование
min,max = x.min(axis=0), x.max(axis=0)
x = (x - min)/(max-min)
model.compile(optimizer="adam", loss="mse", metrics=['mape'])
history = model.fit(x, y, epochs=100)
Ответ или решение
Масштабирование многовходного LSTM
При создании модели LSTM (долгосрочной кратковременной памяти) для предсказания временных рядов, таких как ваша задача с 300 временными рядами и 12 предыдущими значениями, важно правильно выполнить подготовку данных и масштабирование. Ниже представлены рекомендации по нормализации и денормализации, которые помогут улучшить производительность вашей модели.
Проблема нормализации данных
Нормализация данных — это критически важный этап, особенно когда у вас есть данные в различных диапазонах. В вашем случае, вам нужно будет правильно масштабировать данные для 300 временных рядов, чтобы улучшить работу модели.
-
Когда нормализовать данные?
- Нормализация должна осуществляться после разделения данных на входные (X) и выходные (Y). Это важно, потому что во время тестирования вы должны использовать только данные, которые были доступны на этапе предсказания.
-
Как нормализовать данные?
- Вам следует использовать метод Min-Max Scaling, который приведет ваши данные к диапазону [0, 1]. Вот пример кода, который вы можете использовать для нормализации:
import numpy as np # Ваши оригинальные данные sample = 5000 seq_len = 12 features = 300 data = np.arange(0, sample * seq_len * features + 1, 1) x = data[:-1].reshape((sample, seq_len, features)) y = data[seq_len * features::seq_len * features] # Масштабирование min_val = x.min(axis=0) max_val = x.max(axis=0) x = (x - min_val) / (max_val - min_val)
-
Масштабирование выходных данных:
- В вашей ситуации вы должны масштабировать только входные данные (X). Прогнозируемое значение (Y) не требует нормализации, если оно не находится в том же диапазоне значений, что и входные данные. Однако следует убедиться, что при аугментации модели вы учитываете один и тот же масштаб.
Денормализация предсказанных значений
Когда ваша модель завершит обучение и выдаст предсказание, важно преобразовать его обратно в оригинальный масштаб, чтобы интерпретировать результаты.
Для денормализации предсказанного значения вы можете использовать следующий код:
# Допустим, pred — это ваше предсказанное значение
pred = model.predict(input_data) # input_data уже нормализованный
# Денормализация
denorm_pred = pred * (max_val - min_val) + min_val
Увеличение количество обучающих примеров
Как вы правильно заметили, 56 образцов может быть недостаточно для полноценного обучения модели. Рекомендуется использовать значительно больше данных (например, 5000, как вы указали), чтобы повысить обобщающую способность модели и улучшить качество предсказаний.
Заключение
Вопрос масштабирования многовходного LSTM требует тщательной подготовки данных. Правильная нормализация и последующая денормализация предсказанных значений — это ключевые шаги для достижения высоких результатов. Увеличив количество обучающих примеров, вы также повысите эффективность вашей модели, что сделает ее更加 устойчивой и надежной при интерпретации результатов.