如何在Python中使用LSTM获取新数据的预测

3
这是一个单变量时间序列预测问题。如下代码所示,我将原始数据分为训练集(trainX)和测试集(testX),然后使用Keras创建了一个LSTM网络。接下来,我通过训练集对模型进行训练。但是,当我想要得到预测结果时,我需要知道测试值,因此我的问题是:既然我已经知道了这个问题中的测试集的真实值,为什么还需要进行预测呢?我想要得到的是未来时间的预测值?如果我对LSTM网络有误解,请告诉我。
谢谢!
# create and fit the LSTM network
model = Sequential()
model.add(LSTM(4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
# make predictions
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)

机器学习是找到一个函数,当给定X时返回y。其中X可能是中文句子,而y则是翻译成英语的句子。测试模型用于评估模型是否足够好。因此,下一次当您提供另一个X(例如新的中文句子)时,它将预测出y(一个英文句子)。 - Zealseeker
你可能指的是“生成模型”吗?这个实现起来相当复杂。 - O.rka
testPrediction = model.predict(testX)的意思是使用已知数据集testX来评估模型,并获取testX之后时间的预测值。如果您想获取testX之后时间的预测值,可以使用该代码。 - S.X
3个回答

4

由于我们在训练模型时没有未来的价值,所以我们只是将数据分成训练集和测试集。然后我们假设测试集是未来的价值。我们使用训练集(通常还有验证集)来训练模型。在模型训练完成后,我们使用测试集来测试模型的性能。


嗨,如果我们只是将测试集想象成未来的值,并且我们已经评估了模型,那么我们如何使用测试集之后预测的结果精确地进行预测呢? - S.X

3
为什么我已经知道测试数据集的真实值,还要进行预测呢?我想得到的是未来时间的预测值。
在机器学习中,我们提供测试数据X,然后返回Y。对于时间序列问题,这可能会让初学者有些困惑,因为我们使用X,输出看起来也是X:区别在于,我们将时间序列的旧值作为X输入,输出Y是同一时间序列的值,但我们在预测未来(也可以应用于现在甚至过去),正如您正确地指出的那样。
(附言:如果您只想学习机器学习,我建议您从简单的回归开始,然后再转向LSTM等更高级的模型。)

1
我真正理解你的意思,并且了解LSTM网络学习的过程。也许之前我没有清楚地表达问题。实际上,我知道如何训练LSTM网络,但在预测新数据方面遇到了困难。对于我们来说,获取未来值以服务于其他用途更为重要。我只是对如何进行预测有疑问,而不是评估模型。我的意思并不是评估不重要,换句话说,在模型通过评估后,预测值才能发挥作用。 - S.X
好的,我明白了。那么只需使用 model.predict(testX) 即可。实际上,这就是我们在大多数预训练的深度学习模型中所做的,我们不需要重新评估它们。只需拿出模型并进行预测即可。 - Failed Scientist

2
我认为这个上下文中的正确术语是“预测”。
一个好的解释是:在你训练和测试了模型之后,使用你已经有的数据(就像其他人之前所说的那样),你想要预测未来的数据,这才是循环网络的真正有趣之处。
因此,为了做到这一点,你需要从原始数据集中的最后日期的第二天开始,使用模型(该模型是用过去的数据进行训练的)来预测未来的值。一旦你预测出这个值,你就会像以前一样,考虑最后一次预测的值,并依此类推。
你使用预测来进行其他预测的事实意味着得到好的结果更加困难,因此通常尝试预测短时间范围内的情况。
需要执行的确切代码可能会有所不同,但我认为这是主要概念。
在下面的链接中,在最后一部分进行预测时,作者向我们展示了他是如何完成的代码以及解释。

https://towardsdatascience.com/time-series-forecasting-with-recurrent-neural-networks-74674e289816

我想就这样吧。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接