Вопрос или проблема
У меня есть задача бинарной классификации для данных временных рядов. Каждые 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.
Эти шаги помогут вам эффективно подготовить данные, что значительно повысит точность вашей модели.