【发布时间】:2021-08-13 20:49:44
【问题描述】:
上面可能听起来很理想,但我试图预测前面的一步 - 即look_back 为 1。我的代码如下:
def create_scaled_datasets(data, scaler_transform, train_perc = 0.9):
# Set training size
train_size = int(len(data)*train_perc)
# Reshape for scaler transform
data = data.reshape((-1, 1))
# Scale data to range (-1,1)
data_scaled = scaler_transform.fit_transform(data)
# Reshape again
data_scaled = data_scaled.reshape((-1, 1))
# Split into train and test data keeping time order
train, test = data_scaled[0:train_size + 1, :], data_scaled[train_size:len(data), :]
return train, test
# Instantiate scaler transform
scaler = MinMaxScaler(feature_range=(0, 1))
model.add(LSTM(5, input_shape=(1, 1), activation='tanh', return_sequences=True))
model.add(Dropout(0.1))
model.add(LSTM(12, input_shape=(1, 1), activation='tanh', return_sequences=True))
model.add(Dropout(0.1))
model.add(LSTM(2, input_shape=(1, 1), activation='tanh', return_sequences=False))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
# Create train/test data sets
train, test = create_scaled_datasets(data, scaler)
trainY = []
for i in range(len(train) - 1):
trainY = np.append(trainY, train[i + 1])
train = np.reshape(train, (train.shape[0], 1, train.shape[1]))
plotting_test = test
test = np.reshape(test, (test.shape[0], 1, test.shape[1]))
model.fit(train[:-1], trainY, epochs=150, verbose=0)
testPredict = model.predict(test)
plt.plot(testPredict, 'g')
plt.plot(plotting_test, 'r')
plt.show()
输出图为:
本质上,我想要实现的是让模型预测下一个值,我尝试通过将实际值作为特征进行训练,并且标签是沿一个移动的实际值(look_back of 1)。然后我根据测试数据进行预测。正如您从情节中看到的那样,该模型做得很好,除了它似乎没有预测未来,而是似乎在预测现在......我希望情节看起来相似,除了绿线(预测)向左移动一点。我尝试增加look_back 值,但它似乎总是做同样的事情,这让我觉得我训练模型错误,或者试图预测不正确。如果我读错了,并且模型确实在做我想要的,但我解释错了(也很有可能),那么我该如何预测未来呢?
【问题讨论】:
-
你的 LSTM 绝对有可能学到了你还没有学到的东西:给定所有过去的数据,对未来的最佳预测器只是最后一个数据项。例如,在股市中,这是一个非常好的假设。其他数据系列可能是可预测的,但这不是给定的。
标签: keras deep-learning lstm