Я пытаюсь использовать модель LSTM для данных временных рядов.Конкретным фоном данных, с которыми я работаю, является анализ настроений в Твиттере для прогнозирования будущих цен.Данные, которые у меня есть, выглядят так:
date mentions likes retweets polarity count Volume Close
2017-04-10 0.24 0.123 -0.58 0.211 0.58 0.98 0.87
2017-04-11 -0.56 0.532 0.77 0.231 -0.23 0.42 0.92
.
.
.
2019-01-10 0.23 0.356 -0.21 -0.682 0.23 -0.12 -0.23
Размер данных (608, 8), и я планирую использовать функции от 2 до 7 столбцов, а цель, которую я прогнозирую, - Close
(т.е. столбец 8).Мне известно, что модели LSTM требуют, чтобы входные данные имели форму 3D-тензоров, поэтому я сделал несколько операций для преобразования и изменения данных:
x = np.asarray(data.iloc[:, 1:8])
y = np.asarray(data.iloc[:. 8])
x = x.reshape(x.shape[0], 1, x.shape[1])
Впоследствии я попытался обучить модель LSTM следующим образом:
batch_size = 200
model = Sequential()
model.add(LSTM(batch_size, input_dim=3, activation='relu', return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mean_squared_error',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=15)
Запуск этой модели дает мне:
ValueError: Error when checking input: expected lstm_10_input to have
shape (None, 3) but got array with shape (1, 10)
Кто-нибудь знает, где я ошибся?Это то, как я подготовил данные, или я неправильно обучил модель?
Я читал много связанных вопросов по этому сообществу, а также по статьям / блогам, но мне все еще не удается найти решение... Любая помощь приветствуется, спасибо!