MATLABNAR时间序列神经网络两种预测方法

MATLABNAR时间序列神经⽹络两种预测⽅法
通过仔细的探索终于把所有东西都理清楚了,在这⾥⾃我记录和分享给⼤家。另外我需要把我之前的博客全部整理了⼀下,该删的删。因为⼀些理论之前是错的,⽽且也很乱。
⾸先引⽤⼀下math⽼师对于时间序列神经⽹络预测的⽅法,分为两种:循环预测和⼀次性预测。其实这两种⽅法本质上是⼀样的。
循环预测的原理即是利⽤开环⽹络(open-loop)。开环⽹络的特点就是⼀次性只能预测出⼀个,因此其是⽤在训练的时候来⽐对观测值和预测值来评价这个神经⽹络是否训练得好的,⾄于训练神经⽹络的代码,利⽤⼯具箱或者⽹上各种教程,特别多了。开环⽹络如图:
下⾯是循环预测的代码:每⼀步只能预测出⼀个,然后⼿动编写代码将其输出y(t)添加到输⼊中,不断更新输⼊,然后就能实现多步预测(multi-step prediction)。其中force_raw是延迟(delay),即输⼊延迟,其神经⽹络只能够输出其下⼀个时间步的值。
1 for j=1:31
2        force_prediction(j)=net(force_raw);
3        force_raw=[force_raw(2:end);force_prediction(j)];
4    end
需要注意的是,这⾥的j=1:31,31在这⾥即指代的是预测范围(prediction horizon),其在MPC(Model Prediciton Control)中会有应⽤,这个应⽤在后⾯⼀篇⽂章中会讲到。这个预测范围的⼤⼩是有着限定的,即由于该神经⽹络本⾝的结构原因(通过上述代码可以更加清晰地发现),其预测误差是不断累积的,然⽽我们是⽆法规避这种误差的,除⾮更换更加精确的神经⽹络,在后⾯会提到,我会⽤到⼀种长短时记忆时序预测⽹络(LSTM, Long-short term Memory),它能够解决该神经⽹络在预测上的⼀些问题。
⼀次性预测的原理即是利⽤了闭环⽹络(close-loop)。它能够通过nar_net_closed = closeloop(net)这段代码将开环⽹络变成闭环的。闭环⽹络的特点是它代替了我们上述编写代码的步骤 ,即它⾃⼰在内部就会不断迭代反馈循环,然后能够实现⼀次性预测。
实现⼀次性预测。
1nar_net_closed = closeloop(net)
2[p1,Pi1,Ai1,t1] = preparets(nar_net_closed,{},{},y1);
3pred = nar_net_closed(p1,Pi1,Ai1);
与上⾯代码不⼀样的是,这⾥的⽹络输⼊y1的维度数据集(delay数+prediction horizon数),即其预测的过程为将delay步的数据作为初始条件,进⾏prediction horizon步的预测。虽然这样有点难以理解,这⾥也是我唯⼀的问题:既然输⼊的数据已经有了所要预测的数据,那为何还要预测呢?有趣的是,我发现其p1、Pi1均为空矩阵(因为既然nar没有输⼊矩阵,那么p1和Pi1当然也就不存在),然后p1这个空矩阵的维度直接决定了预测的长度,只有Ai1是有实际意义的,其矩阵的形式为——列长度⽅⾯:层与层之间最长延迟向量为长度,因此为30。⾏长度⽅⾯:分为两个部分,蓝⾊所⽰部分跟隐藏层层数有关,该部分数值全部为零,该⽹络只有⼀个隐藏层,因此只有⼀个维度,同时每个维度中还内含维度,维度数为每层的节点数因此为20。⿊⾊所⽰部分为回馈连接层,只有它有数值。综上所述,我认为预测的值跟prediction horizon数的数据集没有关系。Ai1数据结构如下图所⽰:
回馈层维度的中的数值就是输⼊数据经过延迟向量,被切除出数据再经过前⾯各层整理后的数值,这些数值就是⽤于多步预测的初始数据。因此,如果想利⽤矩阵最后两个序列做多步预测,那就只要单独在预测时候把最后两个序列提取出来当成nar的⽬标矩阵再⽤preparets函数准备就可以了。但是这样的话也需要更改⼀下p1,因为它决定了预测步数,这个具体实现需要待我验证⼀下。我的验证⽅式是取前10个数据,然后将preparets预测结构更改⼀下,使其直接变为90步;然后⼀个是直接像上⾯所说直接取100个数,让preparets函数直接帮我⽤前10个数据作为初始条件来迭代预测后⾯90个。(当然,训练的时候需要整个数据集,因为要⽤到观测值来评价神经⽹络模型好坏)下⾯说⼀下preparets函数的实质:将整组数输⼊进去之后,它能够将输⼊矩阵(在nar⾥⾯就只有输出矩阵)前delay个数提取出来,训练只包括iter个,前⾯(假设delay=30)1-30个数会辅助第31个数的拟合,第2-30个数会辅助第32个数的拟合,以此类推,来保证训练效果。
我们会发现闭环虽然可以实现多步预测,但是除了最初的⼏步,以后的预测其实相当不准。如下图所⽰;
第⼀列是观测值,第⼆列是预测值,可以发现这预测是相当不准确的。
神经网络预测
如果闭环反馈加⼊⼀些辅助输⼊表现就会好⼀些,⽐如NARX⽹络,通过两神经⽹络,先预测出X输⼊再预测输出Y,如此循环可以提⾼⼀些准确率。还可以更换新的⼀种⽹络,LSTM⽹络。这个问题将在之后进⾏对⽐描述。

本文发布于:2024-09-23 06:36:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/361714.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:预测   神经   数据   维度   训练   个数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议