Я пытаюсь предсказать движение фондового рынка (1 = положительное, 0 = отрицательное) дня T, используя выборки T-time_steps. Я попытался time_steps = 20, 50, 100, 300 и следующие результаты похожи.
У меня есть следующий кадр данных:
Open High Low Close Volume sentiment Movement
Date
2009-01-02 51.349998 54.529999 51.070000 54.360001 7296400.0 0.084348 1.0
2009-01-05 55.730000 55.740002 53.029999 54.060001 9509800.0 0.104813 0.0
2009-01-06 54.549999 58.220001 53.750000 57.360001 11080100.0 0.185938 1.0
2009-01-07 56.290001 56.950001 55.349998 56.200001 7942700.0 0.047494 0.0
2009-01-08 54.990002 57.320000 54.580002 57.160000 6577900.0 -0.027938 1.0
Следующий кадр данных такой же, как указано выше с использованием MinMaxScaler (feature_range = (0, 1)) для нормализации данных.
Open High Low Close Volume sentiment Movement
Date
2009-01-02 0.001402 0.002215 0.001750 0.002973 0.110116 0.591978 1.0
2009-01-05 0.003604 0.002819 0.002748 0.002823 0.148730 0.625025 0.0
2009-01-06 0.003011 0.004059 0.003114 0.004480 0.176124 0.756025 1.0
2009-01-07 0.003885 0.003424 0.003928 0.003897 0.121391 0.532468 0.0
2009-01-08 0.003232 0.003609 0.003536 0.004380 0.097581 0.410660 1.0
Train: 2263 samples
Test: 252 samples
TIME_STEPS = 300
def create_dataset(X, y, time_steps=1):
Xs, ys = [], []
for i in range(len(X) - time_steps):
v = X.iloc[i:(i + time_steps)].values
Xs.append(v)
ys.append(y.iloc[i + time_steps])
return np.array(Xs), np.array(ys)
X_train, y_train = create_dataset(train, train.Movement, TIME_STEPS)
X_test, y_test = create_dataset(test, test.Movement, TIME_STEPS)
Я создал небольшую модель LSTM с использованием кера, как указано выше:
model = Sequential()
model.add(LSTM(50, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dense(1, activation='sigmoid'))
optimizer = optimizers.RMSprop()
monitor = EarlyStopping(monitor='val_loss', min_delta=1e-2, patience=25)
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1, verbose=1,shuffle=False)
model.summary()
Результаты кажутся чтобы показать некоторую подгонку к набору обучающих данных, я уже пытался добавить отсева, добавить больше слоев, увеличить / уменьшить количество нейронов ... С увеличением эпох точность обучения может достигать 90% без каких-либо проблем, кроме проверки остается прежним (тоже прогноз).
Потери - MSE
Точность
Не могу понять, что такое проблема ...