LSTM дает такой же прогноз для числовых данных - PullRequest
0 голосов
/ 17 сентября 2018

Я создал модель 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

Вот разница в визуализации прогноза и прогноза цены акций.

This is the LSTM prediction

рис: 1 -> Это прогноз LSTM

Stock prediction plot

рис: 2 -> Это прогноз по акциям

Я не уверен, почему он предсказывает одно и то же выходное значение после 10 итераций. Возможно, это проблема исчезающего градиента или я предоставляю меньше входных данных (приблизительно 290) или проблема в архитектуре модели. Я не уверен.

Пожалуйста, помогите, как получить разумный результат.

Спасибо !!!

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Поскольку ваш регрессор обеспечивает минимизацию функции стоимости путем репликации функции, которую вы предоставляете в качестве функции ввода. Например, если у вас есть значение закрытия BTC как $ 6340 в момент времени t, оно пойдет на это при t + 1 или некотором значении, близком к нему. Убедитесь, что вы не даете прямую числовую интуицию регрессору того, чем может быть предсказанная метка, особенно при работе с данными временных рядов.

0 голосов
/ 17 сентября 2018

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

...