• 动态神经网络时间序列预测


          大家好,我是带我去滑雪!

         神经网络投照是否存在反锁与记忆可以分为静态神经网络与动态神经网络。动态神经网络是指神经网络带有反做与记忆功能,无论是局部反馈还是全局反锁。通过反馈与记忆,神经网络能将前一时刻的数据保留,使其加人到下一时刻数据的计算,使网络不仅具有动态性而且保留的系统信息也更加完整。动态神经网络有许多应用,例如,金融分析师用于分析某只股票、基金或者其他金融工具未来某时点的价格,工程师用于预测最近一次可能的飞机引擎故障时间等,可见动态神经网络在分析、仿真、系统监测与控制等领域有重要应用。根据动态神经网络实现系统动态的方法不同,将之分为两类:一类是回归神经网络,它是由静态神经元和网络输出反馈构成的动态网络,典型的有 NARX 回归神经网络;另一类是通过神经元反馈形成,的神经网络,如全回归神经网络、Elman 神经网络、PID神经网络等等。本期将动态网络应用于时间序列的预测中,实现通过 NARX 动态神经网络对时问序列数据的建模仿真及效果评价。

    目录

    一、问题描述与模型建立

    (1)问题描述

    (2)模型建立

    二、代码实现与结果分析

    (1)建立非线性自回归模型

    (2)数据准备工作

    (3)训练函数、误差函数、绘图函数确定

    (3)NARX神经网络模型

    (5)结果分析


    一、问题描述与模型建立

    (1)问题描述

          中和反应是化学反应中复分解反应的一种,是指酸和破互相交换组分、生成盐和水的反应,在中和的过程中,酸里的氢离子和碱中的氢氧根离子会结合成水。中和反应发生后最终产物的PH 值不一定是7。如果一强酸与强破参与中和反应,其产物的PH则会是7。如强酸盐酸和强碱氢氧化钠发生中和反应,产生氣化钠和水。本案例使用 MATLAB 自带案例数据,即给定两个酸碱溶液的流速来预测和反应过程后溶液的PH值。

    (2)模型建立

           数据使用两个含有2001 个监测点的时间序列数据。其中 PhInputs 为一个1×2001维的cell,代表了2001 个监测时间点酸碱溶液的流速。PhTargets 为 1×2001 维的cell,代表中和反应后溶液的pH 值。本研究的目的就是通过当前的酸碱溶液流速预测中和反应后溶液的pH 值大小。

    二、代码实现与结果分析

    (1)建立非线性自回归模型

    1. load phdata
    2. inputSeries = phInputs;
    3. targetSeries = phTargets;
    4. %% 建立非线性自回归模型
    5. inputDelays = 1:2;
    6. feedbackDelays = 1:2;
    7. hiddenLayerSize = 10;
    8. net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize);

    (2)数据准备工作

    1. net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'};
    2. net.inputs{2}.processFcns = {'removeconstantrows','mapminmax'};
    3. %% 时间序列数据准备工作
    4. [inputs,inputStates,layerStates,targets] = preparets(net,inputSeries,{},targetSeries);
    5. %% 训练数据、验证数据、测试数据划分
    6. net.divideFcn = 'dividerand';
    7. net.divideMode = 'value';
    8. net.divideParam.trainRatio = 70/100;
    9. net.divideParam.valRatio = 15/100;
    10. net.divideParam.testRatio = 15/100;

    (3)训练函数、误差函数、绘图函数确定

    1. net.trainFcn = 'trainlm'; % Levenberg-Marquardt
    2. net.performFcn = 'mse'; % Mean squared error
    3. net.plotFcns = {'plotperform','plottrainstate','plotresponse', ...
    4. 'ploterrcorr', 'plotinerrcorr'};
    5. [net,tr] = train(net,inputs,targets,inputStates,layerStates);
    6. outputs = net(inputs,inputStates,layerStates);
    7. errors = gsubtract(targets,outputs);
    8. performance = perform(net,targets,outputs)
    9. trainTargets = gmultiply(targets,tr.trainMask);
    10. valTargets = gmultiply(targets,tr.valMask);
    11. testTargets = gmultiply(targets,tr.testMask);
    12. trainPerformance = perform(net,trainTargets,outputs)
    13. valPerformance = perform(net,valTargets,outputs)
    14. testPerformance = perform(net,testTargets,outputs)
    15. figure, plotperform(tr)
    16. figure, plottrainstate(tr)
    17. figure, plotregression(targets,outputs)
    18. figure, plotresponse(targets,outputs)
    19. figure, ploterrcorr(errors)
    20. figure, plotinerrcorr(inputs,errors)

    (3)NARX神经网络模型

    1. narx_net_closed = closeloop(net);
    2. view(net)
    3. view(narx_net_closed)
    4. phInputs_c=phInputs(1500:2000);
    5. PhTargets_c=phTargets(1500:2000);
    6. [p1,Pi1,Ai1,t1] = preparets(narx_net_closed,phInputs_c,{},PhTargets_c);
    7. yp1 = narx_net_closed(p1,Pi1,Ai1);
    8. plot([cell2mat(yp1)' cell2mat(t1)'])

    (5)结果分析


    更多优质内容持续发布中,请移步主页查看。

    若有问题可邮箱联系:1736732074@qq.com 

    博主的WeChat:TCB1736732074

       点赞+关注,下次不迷路!

  • 相关阅读:
    S3 对象重命名
    量子进化前瞻性优化算法(Python代码实现)
    线程相关方法
    一级缓存(默认开始sqlsession级别)和 二级缓存(testTwoCache)
    springboot配置过滤器和多个拦截器、执行顺序
    【Openxml】颜色变化属性计算
    Bytebase 2023 第三季度回顾
    关于#c语言#的问题:VS键盘录入中文正常,输出时乱码怎么解决啊(开发工具-visual studio)
    uniapp项目实践总结(十一)自定义网络检测组件
    LeetCode —— 复写零(双指针)
  • 原文地址:https://blog.csdn.net/qq_45856698/article/details/134539387