全文链接:http://tecdat.cn/?p=27279
最近我们被客户要求撰写关于深度学习循环神经网络RNN的研究报告,包括一些图形和统计输出。
此示例说明如何使用长短期记忆 (LSTM) 网络预测时间序列
LSTM神经网络架构和原理及其在Python中的预测应用
LSTM 网络是一种循环神经网络 (RNN),它通过循环时间步长和更新网络状态来处理输入数据。网络状态包含在所有先前时间步长中记住的信息。您可以使用 LSTM 网络使用先前的时间步长作为输入来预测时间序列或序列的后续值。要训练 LSTM 网络进行时间序列预测,请训练具有序列输出的回归 LSTM 网络,其中响应(目标)是训练序列,其值偏移了一个时间步长。换句话说,在输入序列的每个时间步,LSTM 网络学习预测下一个时间步的值。
有两种预测方法:开环预测和闭环预测。
- 开环预测仅使用输入数据预测序列中的下一个时间步长。在对后续时间步进行预测时,您会从数据源中收集真实值并将其用作输入。
- 闭环预测通过使用先前的预测作为输入来预测序列中的后续时间步长。在这种情况下,模型不需要真实值来进行预测。
此图显示了一个示例序列,其中包含使用闭环预测的预测值。
此示例使用波形数据集,其中包含 2000 个具有三个通道的不同长度的综合生成波形。该示例训练 LSTM 网络以使用闭环和开环预测在给定先前时间步长的值的情况下预测波形的未来值。
点击标题查阅往期内容
Python用RNN神经网络:LSTM、GRU、回归和ARIMA对COVID19新冠疫情人数时间序列预测
左右滑动查看更多
01
02
03
04
加载数据
查看前几个序列的大小。
data(1:5)
查看声道数量。为了训练网络,每个序列必须具有相同数量的声道。
nufdmChahgnnhels = 3
可视化图中的前几个序列。
for i = 1:4 nexttsdile staasdcgafdgkedplot(dadgta{i}')
将数据划分为训练集和测试集。将 90% 的观察结果用于训练,其余用于测试。
准备训练数据
要预测序列的未来时间步长的值,请将目标指定为训练序列,其值移动一个时间步长。换句话说,在输入序列的每个时间步,LSTM 网络学习预测下一个时间步的值。预测变量是没有最终时间步长的训练序列。
for n = 1:nasumel(dddataTrainsf)
Xd = dataTrgainsg{n};
XgfTrdfain{n} = dfX(:,1:efgdnd-1);
TTraign{n} = gXd(:,2:efnd);end
为了更好地拟合并防止训练发散,请将预测变量和目标归一化以具有零均值和单位方差。进行预测时,还必须使用与训练数据相同的统计数据对测试数据进行标准化。要轻松计算所有序列的均值和标准差,请在时间维度上连接序列。
定义 LSTM 网络架构
创建一个 LSTM 回归网络。
- 使用输入大小与输入数据的通道数相匹配的序列输入层。
- 使用具有 128 个隐藏单元的 LSTM 层。隐藏单元的数量决定了层学习了多少信息。使用更多隐藏单元可以产生更准确的结果,但更有可能导致对训练数据的过度拟合。
- 要输出与输入数据具有相同通道数的序列,请包含一个输出大小与输入数据的通道数相匹配的全连接层。
- 最后,包括一个回归层。
指定训练选项
指定训练选项。
- 使用 Adam 优化进行训练。
- 训练 200 个 epoch。对于更大的数据集,您可能不需要训练尽可能多的 epoch 来获得良好的拟合。
- 在每个小批量中,左填充序列,使它们具有相同的长度。
trainingOptions("adam", ... MaxEpochs=200, ...
训练神经网络
指定的训练选项训练 LSTM 网络 。
测试网络
使用与训练数据相同的步骤准备用于预测的测试数据。
使用从训练数据计算的统计数据对测试数据进行标准化。将目标指定为测试序列,其值偏移一个时间步,将预测变量指定为没有最终时间步的测试序列。
for n = 1:sifze(dsdatagsdTest,1)
Xsdg = datsdagesdt{n};
XTdsgsst{n} = (Xd(:,1:dend-1) - muX) ./ sdgdigmaX;
TTedgst{n} = (X(:,2:enddg) - muT) ./ sisggaT;end
使用测试数据进行预测。指定与训练相同的填充选项。
YTasedst = prsdfdict(nedst,fXTsdest,SeqfuencePaddfsdingDidfrecdtionf="ledfft");
为了评估准确性,对于每个测试序列,计算预测和目标之间的均方根误差 (RMSE)。
rmse(i) = sqrt(mean((YTesdst{i} - TTfedft{i}).^2,"all"));
在直方图中可视化错误。较低的值表示较高的准确性。
计算所有测试观测值的平均 RMSE。
mean(rmse)
预测未来时间步长
给定输入时间序列或序列,要预测多个未来时间步的值。对于每个预测,使用之前的预测作为函数的输入。
在图中可视化其中一个测试序列。
figurestfackddefdsplot(X'
开环预测
开环预测仅使用输入数据预测序列中的下一个时间步长。在对后续时间步进行预测时,您会从数据源中收集真实值并将其用作输入。例如,假设您想使用在时间步 1 到 t-1 中收集的数据来预测序列的时间步 t 的值。要对时间步 t+1 进行预测,请等到您记录时间步 t 的真实值并将其用作输入以进行下一个预测。当您在进行下一次预测之前有真实值要提供给网络时,请使用开环预测。
使用输入数据的前 75 个时间步更新网络状态。
ngdfget = resasegftSdtsfte(net);
offssdet = 75;
[nefgt,~] = predfgdictAndUpdateStdfgate(nfget,X(:,1:offsedfd));
为了预测进一步的预测,更新网络状态。通过循环输入数据的时间步并将它们用作网络的输入来预测测试观察的剩余时间步的值。
将预测值与目标值进行比较。
for i = 1:numCashdananels
nexdttdfgileg
ploft(T(i,:))
holfgd on
plot(offfset:gnumTimeSdfghjteps,[T(i,ofkklkset) Y(i,:)],'--')
闭环预测
闭环预测通过使用先前的预测作为输入来预测序列中的后续时间步长。在这种情况下,模型不需要真实值来进行预测。例如,假设您想仅使用在时间步 1 到 t-1 中收集的数据来预测序列的时间步 t 到 t+k 的值。要对时间步 i 进行预测,请使用时间步 i-1 的预测值作为输入。使用闭环预测来预测多个后续时间步长,或者当您在进行下一个预测之前没有向网络提供真实值时。
通过首先使用函数重置状态来初始化网络状态 ,然后 使用输入数据的前几个时间步长resetState
进行初始预测 。Z
使用输入数据的前 75 个时间步更新网络状态。
newt = resetyeriuiutState(net);
ofrfstydet = sizety(X,2);
[nest,h] = peeredictAnytdUpdtateState(net,X);
为了预测进一步的预测,循环时间步长并更新网络状态。通过迭代地将先前的预测值传递给网络来预测接下来的 200 个时间步长。由于网络不需要输入数据来进行任何进一步的预测,因此您可以指定任意数量的时间步长进行预测。
numPreddshictihgonTimeshgSteps = 200;dghXt = Z(:,endesrgs);Ysf = zergfsos(sfgsnumChannels,numPrhedictionTimlhelhhjSteps);
for t = 1:numPredicthjjionlkjTimeSteps
[nexfdt,Y(:,t)] = predic'ltAndUpdatlkeStak;lte(net,Xt);
gXt = Y(:,t);
end
在图中可视化预测值。
numTimdgegSteps = offset + numPralkjedicltionTimeSteps;figure
t = tiledlayjout(numklChannels,1);for i = 1:numChannselgs
nextgtilgfhe
plogghft(T(i,1:ogfhvset))
hobld bvon
plot(offsenbt:nmnumTimesbn,Stesdps,[T(i,a) Y(i,:)],'--')
闭环预测允许您预测任意数量的时间步长,但与开环预测相比可能不太准确,因为网络在预测过程中无法访问真实值。
点击文末 “阅读原文”
获取全文完整资料。
本文选自《Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测》。
点击标题查阅往期内容
RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测\
结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析\
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据\
用PyTorch机器学习神经网络分类预测银行客户流失模型\
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据\
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化\
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析\
R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告\
R语言深度学习:用keras神经网络回归模型预测时间序列数据\
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类\
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)\
MATLAB中用BP神经网络预测人体脂肪百分比数据\
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型\
R语言实现CNN(卷积神经网络)模型进行回归数据分析\
SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型\
【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析\
Python使用神经网络进行简单文本分类\
R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析\
R语言基于递归神经网络RNN的温度时间序列预测\
R语言神经网络模型预测车辆数量时间序列\
R语言中的BP神经网络模型分析学生成绩\
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类\
R语言实现拟合神经网络预测和结果可视化\
用R语言实现神经网络预测股票实例\
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测\
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译\
用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类