如何使用Keras中的循环神经网络预测未来某个时间跨度

我有以下用于时间序列预测的RNN代码,我想知道在测试中我是否提前一天进行预测:

# -*- coding: utf-8 -*-"""时间序列预测与RNN"""import pandas as pdimport numpy as npfrom tensorflow import keras#%%  配置参数epochs = 5batch_size = 50steps_backwards = int(1* 4 * 24)steps_forward = int(1* 4 * 24)split_fraction_trainingData = 0.70split_fraction_validatinData = 0.90#%%  "读取数据"dataset = pd.read_csv('C:/User1/Desktop/TestValues.csv', sep=';', header=0, low_memory=False, infer_datetime_format=True, parse_dates={'datetime':[0]}, index_col=['datetime'])df = datasetdata = df.valuesindexWithYLabelsInData = 0data_X = data[:, 0:2]data_Y = data[:, indexWithYLabelsInData].reshape(-1, 1)#%%   准备RNN的输入数据series_reshaped_X =  np.array([data_X[i:i + (steps_backwards+steps_forward)].copy() for i in range(len(data) - (steps_backwards+steps_forward))])series_reshaped_Y =  np.array([data_Y[i:i + (steps_backwards+steps_forward)].copy() for i in range(len(data) - (steps_backwards+steps_forward))])timeslot_x_train_end = int(len(series_reshaped_X)* split_fraction_trainingData)timeslot_x_valid_end = int(len(series_reshaped_X)* split_fraction_validatinData)X_train = series_reshaped_X[:timeslot_x_train_end, :steps_backwards] X_valid = series_reshaped_X[timeslot_x_train_end:timeslot_x_valid_end, :steps_backwards] X_test = series_reshaped_X[timeslot_x_valid_end:, :steps_backwards] indexWithYLabelsInSeriesReshapedY = 0lengthOfTheYData = len(data_Y)-steps_backwards -steps_forwardY = np.empty((lengthOfTheYData, steps_backwards, steps_forward))  for step_ahead in range(1, steps_forward + 1):        Y[..., step_ahead - 1] =   series_reshaped_Y[..., step_ahead:step_ahead + steps_backwards, indexWithYLabelsInSeriesReshapedY] Y_train = Y[:timeslot_x_train_end] Y_valid = Y[timeslot_x_train_end:timeslot_x_valid_end] Y_test = Y[timeslot_x_valid_end:]#%%  构建模型并训练model = keras.models.Sequential([    keras.layers.SimpleRNN(90, return_sequences=True, input_shape=[None, 2]),    keras.layers.SimpleRNN(60, return_sequences=True),    keras.layers.TimeDistributed(keras.layers.Dense(steps_forward))    #keras.layers.Dense(steps_forward)])model.compile(loss="mean_squared_error", optimizer="adam", metrics=['mean_absolute_percentage_error'])history = model.fit(X_train, Y_train, epochs=epochs, batch_size=batch_size,                    validation_data=(X_valid, Y_valid))#%%    #预测测试数据Y_pred = model.predict(X_test)prediction_lastValues_list=[]for i in range (0, len(Y_pred)):  prediction_lastValues_list.append((Y_pred[i][0][steps_forward-1]))#%% 创建包含预测的完整数据框架wholeDataFrameWithPrediciton = pd.DataFrame((X_test[:,0]))wholeDataFrameWithPrediciton.rename(columns = {indexWithYLabelsInData:'actual'}, inplace = True)wholeDataFrameWithPrediciton.rename(columns = {1:'Feature 1'}, inplace = True)wholeDataFrameWithPrediciton['predictions'] = prediction_lastValues_listwholeDataFrameWithPrediciton['difference'] = (wholeDataFrameWithPrediciton['predictions'] - wholeDataFrameWithPrediciton['actual']).abs()wholeDataFrameWithPrediciton['difference_percentage'] = ((wholeDataFrameWithPrediciton['difference'])/(wholeDataFrameWithPrediciton['actual']))*100

我定义了eps_forward = int(1* 4 * 24),这基本上一整天(以15分钟为分辨率,即1 * 4 *24 = 96个时间戳)。我通过Y_pred = model.predict(X_test)来预测测试数据,并通过for i in range (0, len(Y_pred)): prediction_lastValues_list.append((Y_pred[i][0][steps_forward-1]))创建一个包含预测值的列表。

由于RNN的输入和输出数据对我来说相当 confusing,我不确定在测试数据集上是否提前一天预测,即预测未来96个时间步。我实际上想要做的是读取历史数据,然后基于过去的96个时间步预测接下来的96个时间步。你们中有人能告诉我我是否使用这段代码实现了这一点吗?

这里我有一个我随机创建的测试数据的链接。请不要关心实际值,只关注预测的结构:下载测试数据

给定的代码是否预测了96个时间步(我的代码基于一个可以在这里找到的教程 RNN用于电价预测的教程)?

提醒:有人能告诉我关于我的问题的一些信息吗?或者您需要更多信息?如果是这样,请告诉我。我非常感谢您的评论,并将非常感谢您的帮助。我也会为有用的答案提供奖励。


回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注