使用LSTM深度学习模型进行温度的时间序列单步和多步预测(二)

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
简介: 使用LSTM深度学习模型进行温度的时间序列单步和多步预测

timesteps-样本的长度。

功能-使用的功能数量。

建模之前的第一件事是将2D格式的数据转换为3D数组。以下功能可以做到这一点:

例如,如果我们假设整个数据是数据的前10行,那么我们将过去3个小时用作特征,并希望预测出1步:

defcreate_X_Y(ts: np.array, lag=1, n_ahead=1, target_index=0) ->tuple:
"""A method to create X and Y matrix from a time series array for the training ofdeep learning models"""#Extractingthenumberoffeaturesthatarepassedfromthearrayn_features=ts.shape[1]
#CreatingplaceholderlistsX, Y= [], []
iflen(ts) -lag<=0:
X.append(ts)
else:
foriinrange(len(ts) -lag-n_ahead):
Y.append(ts[(i+lag):(i+lag+n_ahead), target_index])
X.append(ts[i:(i+lag)])
X, Y=np.array(X), np.array(Y)
#ReshapingtheXarraytoanRNNinputshapeX=np.reshape(X, (X.shape[0], lag, n_features))
returnX, Y

例如,如果我们假设整个数据是数据的前10行,那么我们将过去3个小时用作特征,并希望预测出1步:

ts=d[
‘temp’,
‘day_cos’,
‘day_sin’,
‘month_sin’,
‘month_cos’,
‘pressure’,
‘wind_speed’].head(10).valuesX, Y=create_X_Y(ts, lag=3, n_ahead=1)

640.png

如我们所见,X矩阵的形状是6个样本,3个时间步长和7个特征。换句话说,我们有6个观测值,每个观测值都有3行数据和7列。之所以有6个观测值,是因为前3个滞后被丢弃并且仅用作X数据,并且我们预测提前1步,因此最后一个观测值也会丢失。

640.png

上图中显示了X和Y的第一个值对。

最终模型的超参数列表:

#Numberoflags (hoursback) touseformodelslag=48#Stepsaheadtoforecastn_ahead=1#Shareofobsintestingtest_share=0.1#Epochsfortrainingepochs=20#Batchsizebatch_size=512#Learningratelr=0.001#NumberofneuronsinLSTMlayern_layer=10#Thefeaturesusedinthemodelingfeatures_final= [‘temp’, ‘day_cos’, ‘day_sin’, ‘month_sin’, ‘month_cos’, ‘pressure’, ‘wind_speed’]

模型代码

classNNMultistepModel():
def__init__(
self,
X,
Y,
n_outputs,
n_lag,
n_ft,
n_layer,
batch,
epochs,
lr,
Xval=None,
Yval=None,
mask_value=-999.0,
min_delta=0.001,
patience=5  ):
lstm_input=Input(shape=(n_lag, n_ft))
#Seriessignallstm_layer=LSTM(n_layer, activation='relu')(lstm_input)
x=Dense(n_outputs)(lstm_layer)
self.model=Model(inputs=lstm_input, outputs=x)
self.batch=batchself.epochs=epochsself.n_layer=n_layerself.lr=lrself.Xval=Xvalself.Yval=Yvalself.X=Xself.Y=Yself.mask_value=mask_valueself.min_delta=min_deltaself.patience=patiencedeftrainCallback(self):
returnEarlyStopping(monitor='loss', patience=self.patience, min_delta=self.min_delta)
deftrain(self):
#Gettingtheuntrainedmodelempty_model=self.model#Initiatingtheoptimizeroptimizer=keras.optimizers.Adam(learning_rate=self.lr)
#Compilingthemodelempty_model.compile(loss=losses.MeanAbsoluteError(), optimizer=optimizer)
if (self.XvalisnotNone) & (self.YvalisnotNone):
history=empty_model.fit(
self.X,
self.Y,
epochs=self.epochs,
batch_size=self.batch,
validation_data=(self.Xval, self.Yval),
shuffle=False,
callbacks=[self.trainCallback()]
          )
else:
history=empty_model.fit(
self.X,
self.Y,
epochs=self.epochs,
batch_size=self.batch,
shuffle=False,
callbacks=[self.trainCallback()]
          )
#Savingtooriginalmodelattributeintheclassself.model=empty_model#Returningthetraininghistoryreturnhistorydefpredict(self, X):
returnself.model.predict(X)

创建用于建模之前的最后一步是缩放数据。

#Subsetingonlytheneededcolumnsts=d[features_final]nrows=ts.shape[0]
#Splitingintotrainandtestsetstrain=ts[0:int(nrows* (1test_share))]
test=ts[int(nrows* (1test_share)):]
#Scalingthedatatrain_mean=train.mean()
train_std=train.std()train= (traintrain_mean) /train_stdtest= (testtrain_mean) /train_std#Creatingthefinalscaledframets_s=pd.concat([train, test])
#CreatingtheXandYfortrainingX, Y=create_X_Y(ts_s.values, lag=lag, n_ahead=n_ahead)n_ft=X.shape[2]

现在我们将数据分为训练和验证

#SplitingintotrainandtestsetsXtrain, Ytrain=X[0:int(X.shape[0] * (1test_share))], Y[0:int(X.shape[0] * (1test_share))]
Xval, Yval=X[int(X.shape[0] * (1test_share)):], Y[int(X.shape[0] * (1test_share)):]

数据的最终形状:

Shapeoftrainingdata: (243863, 48, 7)
Shapeofthetargetdata: (243863, 1)
Shapeofvalidationdata: (27096, 48, 7)
Shapeofthevalidationtargetdata: (27096, 1)

剩下的就是使用模型类创建对象,训练模型并检查验证集中的结果。

#Initiatingthemodelobjectmodel=NNMultistepModel(
X=Xtrain,
Y=Ytrain,
n_outputs=n_ahead,
n_lag=lag,
n_ft=n_ft,
n_layer=n_layer,
batch=batch_size,
epochs=epochs,
lr=lr,
Xval=Xval,
Yval=Yval,
)
#Trainingofthemodelhistory=model.train()

640.png

使用训练好的模型,我们可以预测值并将其与原始值进行比较。

#Comparingtheforecastswiththeactualvaluesyhat= [x[0] forxinmodel.predict(Xval)]
y= [y[0] foryinYval]
#Creatingtheframetostorebothpredictionsdays=d[‘dt’].values[-len(y):]frame=pd.concat([
pd.DataFrame({‘day’: days, ‘temp’: y, ‘type’: ‘original’}),
pd.DataFrame({‘day’: days, ‘temp’: yhat, ‘type’: ‘forecast’})
])
#Creatingtheunscaledvaluescolumnframe[‘temp_absolute’] = [(x*train_std[‘temp’]) +train_mean[‘temp’] forxinframe[‘temp’]]
#Pivotingpivoted=frame.pivot_table(index=’day’, columns=’type’)
pivoted.columns= [‘_’.join(x).strip() forxinpivoted.columns.values]
pivoted[‘res’] =pivoted[‘temp_absolute_original’] pivoted[‘temp_absolute_forecast’]
pivoted[‘res_abs’] = [abs(x) forxinpivoted[‘res’]]
目录
相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本内容包含基于BiLSTM与遗传算法(GA)的算法介绍及实现。算法通过MATLAB2022a/2024b运行,核心为优化BiLSTM超参数(如学习率、神经元数量),提升预测性能。LSTM解决传统RNN梯度问题,捕捉长期依赖;BiLSTM双向处理序列,融合前文后文信息,适合全局信息任务。附完整代码(含注释)、操作视频及无水印运行效果预览,适用于股票预测等场景,精度优于单向LSTM。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
3月前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于Matlab 2022a/2024b实现,结合灰狼优化(GWO)算法与双向长短期记忆网络(BiLSTM),用于序列预测任务。核心代码包含数据预处理、种群初始化、适应度计算及参数优化等步骤,完整版附带中文注释与操作视频。BiLSTM通过前向与后向处理捕捉序列上下文信息,GWO优化其参数以提升预测性能。效果图展示训练过程与预测结果,适用于气象、交通等领域。LSTM结构含输入门、遗忘门与输出门,解决传统RNN梯度问题,而BiLSTM进一步增强上下文理解能力。
|
机器学习/深度学习 数据采集 算法
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
本文探讨了在深度学习和机器学习中针对非时间序列的回归任务的多种改进策略,包括数据预处理、数据集增强、特征选择、模型选择、模型正则化与泛化、优化器选择、学习率调整、超参数调优以及性能评估与模型解释,旨在提升模型的性能和可解释性。
259 1
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
|
6月前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
7月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。
|
6月前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本内容介绍了一种基于CNN-LSTM-SAM网络与鲸鱼优化算法(WOA)的时间序列预测方法。算法运行于Matlab2022a,完整程序无水印并附带中文注释及操作视频。核心流程包括数据归一化、种群初始化、适应度计算及参数更新,最终输出最优网络参数完成预测。CNN层提取局部特征,LSTM层捕捉长期依赖关系,自注意力机制聚焦全局特性,全连接层整合特征输出结果,适用于复杂非线性时间序列预测任务。

热门文章

最新文章