Я создал модель LSTM для внутридневных прогнозов акций. Я взял тренировочные данные в форме (290, 4). Я сделал всю предварительную обработку, как Нормализация данных, принимая разницу, принимая размер окна 4.
Это образец моих входных данных.
X = array([[0, 0, 0, 0],
[array([ 0.19]), 0, 0, 0],
[array([-0.35]), array([ 0.19]), 0, 0],
...,
[array([ 0.11]), array([-0.02]), array([-0.13]), array([-0.09])],
[array([-0.02]), array([ 0.11]), array([-0.02]), array([-0.13])],
[array([ 0.07]), array([-0.02]), array([ 0.11]), array([-0.02])]], dtype=object)
y = array([[array([ 0.19])],
[array([-0.35])],
[array([-0.025])],
.....,
[array([-0.02])],
[array([ 0.07])],
[array([-0.04])]], dtype=object)
Примечание. Я даю и прогнозирую разницу. Таким образом, входное значение находится в диапазоне (-0,5,0,5)
Вот моя модель Keras LSTM:
dim_in = 4
dim_out = 1
model.add(LSTM(input_shape=(1, dim_in),
return_sequences=True,
units=6))
model.add(Dropout(0.2))
model.add(LSTM(batch_input_shape=(1, features.shape[1],features.shape[2]),return_sequences=False,units=6))
model.add(Dropout(0.3))
model.add(Dense(activation='linear', units=dim_out))
model.compile(loss = 'mse', optimizer = 'rmsprop')
for i in range(300):
#print("Completed :",i+1,"/",300, "Steps")
model.fit(X, y, epochs=1, batch_size=1, verbose=2, shuffle=False)
model.reset_states()
Я передаю последнее значение последовательности shape = (1,4) и прогнозирую вывод.
Это мой прогноз:
base_value = df.iloc[290]['Close']
prediction = []
orig_pred = []
input_data = np.copy(test[0,:])
input_data = input_data.reshape(len(input_data),1)
for i in range(100):
inp = input_data[i:,:]
inp = inp.reshape(1,1,inp.shape[0])
y = model.predict(inp)
orig_pred.append(y[0][0])
input_data = np.insert(input_data,[i+4],y[0][0], axis=0)
base_value = base_value + y
prediction_apple.append(base_value[0][0])
sqrt(mean_squared_error(test_output, orig_pred))
RMSE = 0,10592485833344527
Вот разница в визуализации прогноза и прогноза цены акций.
рис: 1 -> Это прогноз LSTM
рис: 2 -> Это прогноз по акциям
Я не уверен, почему он предсказывает одно и то же выходное значение после 10 итераций. Возможно, это проблема исчезающего градиента или я предоставляю меньше входных данных (приблизительно 290) или проблема в архитектуре модели. Я не уверен.
Пожалуйста, помогите, как получить разумный результат.
Спасибо !!!