【发布时间】:2019-02-21 02:57:09
【问题描述】:
我创建了一个用于盘中股票预测的 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
这是预测可视化与股票价格预测的区别。
fig:1 -> 这是 LSTM 预测
fig:2 -> 这是股票预测
我不确定为什么它在 10 次迭代后预测相同的输出值。可能是梯度消失问题,或者我输入的输入数据较少(大约 290 个)或模型架构中的问题。我不知道。
请帮助如何获得合理的结果。
谢谢!!!
【问题讨论】:
-
尝试更改激活
-
仍然得到相同的输出。
-
你为什么要这样做
model.fit(X, y, epochs=1, batch_size=1, verbose=2, shuffle=False)?。model_p是什么?你为什么不使用model?尝试使用多个 epoch 运行并仅拟合模型一次。不需要那个 for 循环(for i in range(300)) -
@Kalsi 为编写 model_p 致歉,我已对其进行了编辑。我使用了 300 个 epoch,仍然得到相同的输出。
-
问题解决了吗? (我也有类似的):stackoverflow.com/questions/56804431/…
标签: python keras deep-learning lstm rnn