Kar*_*sia 3 machine-learning time-series lstm keras gated-recurrent-unit
我只是在考验从kaggle这个模型后 这一模型假设来预测从给定的最后股票的第一天提前。正如你所看到的,在调整了几个参数后,我得到了令人惊讶的好结果。
均方误差是 5.193。所以总的来说它在预测未来股票方面看起来不错,对吗?好吧,当我仔细查看结果时,结果很糟糕。
如您所见,该模型正在预测给定股票的最后价值,即我们当前的最后一只股票。
所以我确实将预测调整为后退一步..
所以现在您可以清楚地看到该模型预测的是倒退一步或最后一个股票奖励,而不是未来的股票预测。
# So for each element of training set, we have 30 previous training set elements
X_train = []
y_train = []
previous = 30
for i in range(previous,len(training_set_scaled)):
X_train.append(training_set_scaled[i-previous:i,0])
y_train.append(training_set_scaled[i,0])
X_train, y_train = np.array(X_train), np.array(y_train)
print(X_train[-1],y_train[-1])
Run Code Online (Sandbox Code Playgroud)
# The GRU architecture
regressorGRU = Sequential()
# First GRU layer with Dropout regularisation
regressorGRU.add(GRU(units=50, return_sequences=True, input_shape=(X_train.shape[1],1)))
regressorGRU.add(Dropout(0.2))
# Second GRU layer
regressorGRU.add(GRU(units=50, return_sequences=True))
regressorGRU.add(Dropout(0.2))
# Third GRU layer
regressorGRU.add(GRU(units=50, return_sequences=True))
regressorGRU.add(Dropout(0.2))
# Fourth GRU layer
regressorGRU.add(GRU(units=50))
regressorGRU.add(Dropout(0.2))
# The output layer
regressorGRU.add(Dense(units=1))
# Compiling the RNN
regressorGRU.compile(optimizer='adam',loss='mean_squared_error')
# Fitting to the training set
regressorGRU.fit(X_train,y_train,epochs=50,batch_size=32)
Run Code Online (Sandbox Code Playgroud)
而这里是我的全部代码,您还可以在运行此代码google colab。
所以我的问题是它背后的原因是什么?我做错了什么有什么建议吗?
小智 5
实际上,这是一个众所周知的回归问题。由于回归器的任务是最小化错误,它通过从您输入到回归器的特征中选择最接近的值来保护它的任务。在时间序列问题中尤其如此。
1) 永远不要给出您希望模型预测的未处理的收盘值,尤其是在时间序列回归问题中。更一般地说,永远不要给出一个特征,即给回归器一些关于标签可能是什么的直接数字直觉。
2)如果您不确定模型是否只是像您的情况一样复制,请务必将原始测试集和您的预测一起绘制以直观地分析情况。此外,如果可以,请在实时数据上模拟您的模型,以观察您的模型是否以相同的性能进行预测。
3)我建议您应用二元分类而不是回归。
近一年来,我一直致力于金融信号预测,请不要犹豫,问更多。
玩得开心。