2026/4/18 10:27:34
网站建设
项目流程
齐河网站建设价格,微信朋友圈营销文案,做企业官网教程,刘涛做的网站基于带外源输入的非线性自回归网络(NARX)的时间序列预测 NARX时间序列
matlab 代码
注#xff1a;暂无Matlab版本要求 -- 推荐 2018B 版本及以上最近在折腾时间序列预测#xff0c;发现NARX网络对付非线性数据效果挺有意思。这玩意儿全名叫带外源输入的非线性自回归网络…基于带外源输入的非线性自回归网络(NARX)的时间序列预测 NARX时间序列 matlab 代码 注暂无Matlab版本要求 -- 推荐 2018B 版本及以上最近在折腾时间序列预测发现NARX网络对付非线性数据效果挺有意思。这玩意儿全名叫带外源输入的非线性自回归网络听着复杂其实跟咱们平时用的循环神经网络有点像但多了外部变量输入这个buff。先上段Matlab实战代码热热身% 数据准备假设已有时间序列数据 load engine_data % 自带示例数据集 inputSeries con2seq(exInput); % 外部输入序列 targetSeries con2seq(exOutput); % 目标输出序列 % 创建NARX网络 delay 2; % 延迟阶数 hiddenLayerSize 10; narxNet narxnet(1:delay,1:delay,hiddenLayerSize); % 数据预处理 [Xs,Xi,Ai,Ts] preparets(narxNet,inputSeries,{},targetSeries); % 训练配置 narxNet.divideFcn divideblock; % 按块划分数据集 narxNet.trainParam.epochs 100; narxNet.trainParam.min_grad 1e-5; % 开练 [net,tr] train(narxNet,Xs,Ts,Xi,Ai); % 预测未来三步 prediction net(Xs,Xi,Ai);这里有几个关键点值得唠唠。延迟阶数相当于给网络开了个时间窗口比如delay2时网络会同时看t-1和t-2时刻的数据。hiddenLayerSize别设太大我之前试过设50结果过拟合得亲妈都不认识10-20层足够应对多数场景。数据预处理里的preparets函数是个隐藏大佬自动帮咱们处理输入输出对齐问题。要是自己手动处理时间延迟数据代码量至少翻三倍。不过要注意输出序列会比输入短delay个点新手容易在这儿翻车。训练时强烈推荐用divideblock代替默认的随机划分时间序列讲究时间连贯性乱序划分会让模型学了个寂寞。早停法Epochs设个合理值也是个防过拟合的利器毕竟这网络的学习能力堪比黑洞稍不留神就把噪声都吃进去了。预测部分有个坑需要注意当用预测值继续滚动预测时记得把网络输出重新接入输入层。这里给个多步预测的扩展代码% 转成开环网络做多步预测 narxNetClosed narxNet; narxNetOpen removedelay(narxNetClosed); [predictionsOpen,xiOpen,aiOpen] narxNetOpen(Xs,Xi,Ai); % 可视化对比 figure plot(cell2mat([targetSeries; predictionsOpen])) legend(真实值,预测值) title(NARX预测效果)这个removedelay操作相当于把闭环改成开环让网络能持续用自己预测的结果作为下一步输入。不过实际用起来会发现预测误差会逐渐累积所以长期预测还是要配合其他方法。最后说下数据归一化这个玄学问题。虽然示例代码里没体现但遇到量纲差异大的输入特征时建议加上% 手动归一化 inputSeries (inputSeries - mean(inputSeries))./std(inputSeries); targetSeries (targetSeries - mean(targetSeries))./std(targetSeries);别完全依赖工具箱自带的归一化特别是当训练集和测试集分布不一致时手动控制更靠谱。我上次有个项目没注意这个细节预测结果直接飞出了银河系。总的来说NARX网络就像个带记忆的智能漏斗能把时间信息和外部变量搅和在一起榨出预测规律。不过别指望它通吃所有场景遇到高频震荡数据还是得上LSTM之类的专业选手。下次有机会再聊聊怎么用NARX网络预测股票走势——当然亏了别找我手动狗头