我只是在测试这个来自Kaggle的模型post,这个模型应该能够预测从给定的最后一批股票开始往后一天的情况。经过调整几个参数后,我得到了出乎意料的好结果,正如你所看到的。
均方误差为5.193。因此总体上看起来它能够很好地预测未来的股票价格,对吧?但是当我仔细查看结果时,它的表现非常糟糕。
![enter image description here](https://istack.dev59.com/aR4JT.webp)
正如您所看到的,这个模型正在预测给定股票的最后一个值,即我们当前的最后一支股票。
因此,我将预测调整为向后一步...
现在你可以清楚地看到,这个模型正在预测向后一步或者说是最后一支股票的价格,而不是未来的股票价格。
这是我的训练数据
# 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])
这是我的模型
# 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)
这里是我的完整代码,您也可以在Google Colab
上运行此代码。
所以我的问题是什么原因呢?我做错了什么,有什么建议吗?