Вопрос или проблема
Я реализую LSTM
с использованием Keras
и знаю, что мне нужно изменить размер обучающего набора данных на 3D объект. В основном, у меня есть набор данных размером (300000, 839)
, и я изменяю его на (100000, 3, 839)
, потому что я хочу временной шаг равный 3. Вопрос в том: как мне обрабатывать метки обучающего набора? Нужно ли их тоже изменять? Если я изменю метки до 100000
, я не усечу 200000
меток, поскольку начальное количество меток составляет 300000
?
Заранее спасибо.
Ваш подход до сих пор не совсем правильный. Предполагая, что вы хотите использовать модель many to one, вы можете сделать это следующим образом:
У вас есть набор данных, похожий на этот:
И вы подготавливаете ваши данные таким образом:
Для временного шага 3 вы отбрасываете первые 2 случая ваших меток и используете $y_{3}$ для входных данных $\{x_1, x_2,x_3\}$.
Далее вы не начинаете с $x_4$. Вместо этого вы используете следующий срез из трех элементов $\{x_2, x_3, x_4\}$ с меткой обучения $y_4$.
Таким образом, вы продолжаете до последнего ввода $\{x_{n-2}, x_{n-1}, x_{n}\}$, чтобы предсказать $y_n$. Если у вас есть $n=30000$ образцов, вы сможете сгенерировать до $n-2$ (29998) обучающих образцов для вашей модели, следуя этой логике.
Вам не нужно изменять размер меток. Метки в LSTM могут быть одномерными. Только массив, содержащий значения x, нужно изменить.
Ответ или решение
Как подать метки обучающей выборки в Keras LSTM
При разработке моделей на базе LSTM (долгосрочной памяти с учетом временных рядов) в Keras важно правильно подготовить как входные данные, так и метки. Давайте разберем процесс, учитывая вашу задачу с форматом данных и необходимыми преобразованиями.
1. Подготовка входных данных LSTM
Вы упомянули, что ваш набор данных имеет размерность (300000, 839)
, и вы хотите преобразовать его в 3D-массив с размерностью (100000, 3, 839)
. Это преобразование необходимо, поскольку LSTM ожидает, что входные данные будут представлены в виде трехмерного массива, где:
- первый размер: количество выборок (samples),
- второй размер: количество временных шагов (timesteps),
- третий размер: количество признаков (features).
Для формирования вашего нового массива вам необходимо использовать метод "скользящего окна". Это означает следующее:
- Вы берете первые 3 строки (timesteps) из вашего набора данных как входные данные и соответствующую метку для предсказания (это будет четвертая метка).
- Затем вы сдвигаетесь на один шаг и повторяете процесс, пока не достигнете конца вашего набора данных.
2. Обработка меток
Что касается меток, то их формирование также требует внимательного подхода. В случае вашей задачи, когда вы используете 3 временных шага, ваши метки будут формироваться следующим образом:
- Исходная метка — это просто следующий элемент после вашего "окна". То есть, если вы имеете
x_1
,x_2
, иx_3
(ваши входные данные), то соответствующей меткой будетy_4
. - Таким образом, если ваш исходный массив имеет 300000 строк, после применения техники "скользящего окна" вам не нужно изменять размерность меток, а просто исключить первые два элемента. В результате, у вас останется 299998 меток.
Следовательно, ваши метки будут представлять собой одномерный массив размером (299998,)
, который будет соответствовать каждой выборке из вашего входного 3D массива.
3. Пример кода
Для иллюстрации, приведем пример кода, который выполняет описанные шаги:
import numpy as np
# Допустим, у нас есть данные и метки
data = np.random.random((300000, 839))
labels = np.random.random((300000,))
# Функция для подготовки входных данных и меток
def prepare_data(data, labels, time_steps=3):
x, y = [], []
for i in range(len(data) - time_steps):
x.append(data[i:i + time_steps])
y.append(labels[i + time_steps])
return np.array(x), np.array(y)
# Подготовим данные
X, y = prepare_data(data, labels)
print(X.shape) # Должно быть (299997, 3, 839)
print(y.shape) # Должно быть (299997,)
4. Заключение
Важно помнить, что LSTM требует строгого соблюдения формата входных данных. Изменение размерности меток в большинстве случаев не требуется; достаточно следовать логике "скользящего окна", чтобы точно соотнести входные данные и метки. Это обеспечит корректное обучение модели и улучшит её качество.
Следуя данным рекомендациям, вы сможете эффективно подготавить ваши данные и метки для успешного обучения LSTM в Keras. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за помощью к сообществу или профессионалам в данной области.