当前位置:网站首页>Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测
Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测
2022-06-22 07:06:00 【拓端研究室】
原文链接:http://tecdat.cn/?p=27279
原文出处:拓端数据部落公众号
此示例说明如何使用长短期记忆 (LSTM) 网络预测时间序列。
相关视频:
LSTM神经网络架构和原理及其在Python中的预测应用
LSTM 网络是一种循环神经网络 (RNN),它通过循环时间步长和更新网络状态来处理输入数据。网络状态包含在所有先前时间步长中记住的信息。您可以使用 LSTM 网络使用先前的时间步长作为输入来预测时间序列或序列的后续值。要训练 LSTM 网络进行时间序列预测,请训练具有序列输出的回归 LSTM 网络,其中响应(目标)是训练序列,其值偏移了一个时间步长。换句话说,在输入序列的每个时间步,LSTM 网络学习预测下一个时间步的值。
有两种预测方法:开环预测和闭环预测。
开环预测仅使用输入数据预测序列中的下一个时间步长。在对后续时间步进行预测时,您会从数据源中收集真实值并将其用作输入。
闭环预测通过使用先前的预测作为输入来预测序列中的后续时间步长。在这种情况下,模型不需要真实值来进行预测。
此图显示了一个示例序列,其中包含使用闭环预测的预测值。

此示例使用波形数据集,其中包含 2000 个具有三个通道的不同长度的综合生成波形。该示例训练 LSTM 网络以使用闭环和开环预测在给定先前时间步长的值的情况下预测波形的未来值。
加载数据
查看前几个序列的大小。
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)
预测未来时间步长
给定输入时间序列或序列,要预测多个未来时间步的值。对于每个预测,使用之前的预测作为函数的输入。
在图中可视化其中一个测试序列。
figure
stfackddefdsplot(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,:)],'--')

闭环预测允许您预测任意数量的时间步长,但与开环预测相比可能不太准确,因为网络在预测过程中无法访问真实值。

最受欢迎的见解
1.用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
2.Python中利用长短期记忆模型LSTM进行时间序列预测分析 – 预测电力消耗数据
4.Python中用PyTorch机器学习分类预测银行客户流失模型
6.在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析
边栏推荐
- Protection of RT thread critical section
- 6. 安装ssh连接工具(用于我们连接实验室的服务器)
- 【GAN】W-GAN ICLR‘17, ICML‘17
- How can we effectively alleviate anxiety? See what ape tutor says
- 【GAN】SAGAN ICML‘19
- 《数据安全实践指南》- 数据采集安全实践-数据分类分级
- Vector of relevant knowledge of STL Standard Template Library
- June training (day 22) - orderly gathering
- Thousands of sails pass by the side of the sunken boat, and thousands of trees spring before the diseased tree
- Common evaluation indicators of recommended system: ndcg, recall, precision, hit rate
猜你喜欢
![[fundamentals of machine learning 02] decision tree and random forest](/img/24/28964279ea479476e1a232aec9c599.jpg)
[fundamentals of machine learning 02] decision tree and random forest

Introduction to 51 single chip microcomputer - 8x8 dot matrix LED

Kinect azure based multi camera data collection (I)

Wildfire stm32f407zgt6 learning notes beginner level chapter basic knowledge points

cookie的介绍和使用
![[anomaly detection] malware detection: mamadroid (dnss 2017)](/img/dd/37a443fce627f7f38e3fe1767cb10e.jpg)
[anomaly detection] malware detection: mamadroid (dnss 2017)

Introduction to 51 Single Chip Microcomputer -- timer and external interrupt

【GAN】《ENERGY-BASED GENERATIVE ADVERSARIAL NETWORKS》 ICLR‘17

vue连接mysql数据库失败

Introduction to 51 Single Chip Microcomputer -- the use of Proteus 8 professional
随机推荐
JS中如何阻止事件的传播
DL and alignment of spatially resolved single cell transcriptomes with Tangram
June training (day 22) - orderly gathering
sessionStorage 和 localStorage 的使用
Common evaluation indicators of recommended system: ndcg, recall, precision, hit rate
Languo technology helps the ecological prosperity of openharmony
Dijin introduces digi connectcore voice control software for connectcore system module
Article editing test of CSDN
Convolutional neural network (notes, for personal use)
Data security practice guide - data collection security management
Neuron+ekuiper realizes data collection, cleaning and anti control of industrial Internet of things
Introduction to 51 single chip microcomputer - matrix key
Several methods of array de duplication in JS
Résumé semestriel du programmeur de 33 ans
校招路上的坑
Event preview edgex developer summit @ Nanjing station is coming!
EMC solutions
Multi camera data collection based on Kinect azure (II)
JS中对数组进行去重的几种方法
圣杯布局和双飞翼布局的区别