Как подготовить данные для предсказания временных рядов с помощью LSTM

Вопрос или проблема

У меня есть задача бинарной классификации для данных временных рядов. Каждые 14 строк в моем CSV соответствуют одному временном интервалу. Как мне подготовить эти данные для использования в LSTM? Другими словами, как подать модель эти данные?

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

Разделите данные на X:training_data, Y:label. Затем используйте векторизатор и обучайте, используя X и Y. Если вы сможете выполнить вышеуказанные шаги, тогда используйте такие методы, как test_train set , cross_folds и т.д.

Дружеское предложение: попробуйте слои seq2seq перед LSTM (они требуют больше ресурсов).

Хотя я не уверен в этом утверждении “Каждые 14 строк в моем CSV соответствуют одному временном интервалу.”, так как это не ясно для меня.

Но если я приму ваш комментарий “Как мне загрузить эти данные в LSTM? Таким образом, количество столбцов равно 12 “, я полагаю, что вы спрашиваете, как загрузить несколько признаков (в вашем случае 12) для модели временного ряда.

Если я правильно понимаю, это проблема типа “Несколько параллельных временных рядов”. Я создал аналогичную модель в TensorFlow и выложил ее на GitHub. Исходный код GitHub для нескольких параллельных временных рядов

Примечание: здесь вместо 12 признаков я использовал 3 признака.

Вот псевдокод для этого:

Импортировать pandas как pd
Импортировать numpy как np

Данные = pd.read_csv(имя_файла)
Lag = 14
# предполагая, что целевой столбец последний
X=[ ]
Y = [ ]
для x в диапазоне(lag, len(data)):
     X.append(data.iloc[x-lag:x,:])
     Y.append(data.iloc[x,-1])
X= np.array(X)
Y = np.array(Y)

Ответ или решение

Для подготовки данных к предсказанию временных рядов с помощью LSTM (долгосрочной памяти), важно учитывать структуру ваших данных и тип задачи, которую вы собираетесь решить. В вашем случае задача классификации основана на временных рядах, где каждая группа из 14 строк в CSV-файле соответствует одному временно́му интервалу. Рассмотрим, как правильно подготовить данные для модели LSTM.

1. Загрузка данных и предварительная обработка

Сначала необходимо загрузить данные из CSV-файла и произвести первоначальную очистку. Это включает удаление дубликатов, заполнение или удаление пропущенных значений, а также преобразование типов данных. В Python вы можете использовать библиотеку pandas.

import pandas as pd

# Загрузка данных
data = pd.read_csv('filename.csv')

# Предварительная обработка
data.drop_duplicates(inplace=True)
data.fillna(method='ffill', inplace=True)  # Метод заполнения вперед

2. Формирование временных окон

Как вы отметили, каждые 14 строк относятся к одному временно́му интервалу. Вам необходимо сформировать временные окна, которые будут служить входными данными для модели LSTM. В вашем коде, вы можете использовать следующий подход:

import numpy as np

lag = 14  # Количество временных точек
X = []
Y = []

# Формируем временные окна
for i in range(lag, len(data)):
    X.append(data.iloc[i-lag:i, :-1].values)  # Все колонки, кроме целевой
    Y.append(data.iloc[i, -1])  # Последняя колонка как целевая переменная

X = np.array(X)
Y = np.array(Y)

3. Нормализация данных

Важно нормализовать данные перед подачей их в модель LSTM, чтобы ускорить обучение и улучшить сходимость. Вы можете использовать MinMaxScaler или StandardScaler из библиотеки sklearn.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
X = scaler.fit_transform(X.reshape(-1, X.shape[-1])).reshape(X.shape)  # Нормализация

4. Разделение на обучающую и тестовую выборки

Для создания модели с использованием LSTM необходимо разделить данные на обучающую и тестовую выборки. Используйте train_test_split из библиотеки sklearn или просто разрежьте массивы.

from sklearn.model_selection import train_test_split

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)

5. Создание модели LSTM

Теперь вы готовы к созданию модели LSTM. Вот пример кода для TensorFlow/Keras:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(50))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))  # Для бинарной классификации

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

6. Обучение модели

После создания модели, вы можете обучить её, передав данные.

model.fit(X_train, Y_train, epochs=50, batch_size=32, validation_data=(X_test, Y_test))

Заключение

Подготовка данных для задачи предсказания временных рядов с использованием LSTM требует тщательной обработки и формулировки входных данных. Обеспечьте правильную нормализацию, разделение на обучающие и тестовые выборки, а также используйте подходящие архитектуры LSTM.

Эти шаги помогут вам эффективно подготовить данные, что значительно повысит точность вашей модели.

Оцените материал
Добавить комментарий

Капча загружается...