TCN-BiGRU回归 基于时间卷积神经网络(TCN)-双向门控循环单元(BiGRU)的数据回...
TCN-BiGRU回归 基于时间卷积神经网络(TCN)-双向门控循环单元(BiGRU)的数据回归预测(可以更换为单变量时序预测/回归,前私我),Matlab代码,可直接运行,适合小白新手 程序已经调试好,无需更改代码替换数据集即可运行数据格式为excel 1、运行环境要求MATLAB版本为2022b及其以上 2、评价指标包括:R2、MAE、MSE、RPD、RMSE等,图很多,符合您的需要 3、代码中文注释清晰,质量极高 4、测试数据集,可以直接运行源程序 替换你的数据即可用 适合新手小白 5、 保证源程序运行,
时间序列预测总让人头大是不是?传统方法要么抓不住长期依赖,要么处理不好序列双向信息。试试这个TCN-BiGRU组合拳,Matlab版代码连数据都不用预处理,Excel表格拖进去就能跑。说人话的代码注释比亲妈还贴心,R2、MAE五六个指标直接怼脸上,可视化曲线多到能当壁纸库用。

先看数据怎么喂给模型。新建个excel表格,第一列放时间戳(不需要处理成日期格式),第二列直接怼上你的观测值。代码里这个data_load函数简直懒人福音:
raw_data = readtable('你家数据.xlsx');
time_sequence = raw_data.时间列;
value_sequence = raw_data.观测值列;
注意这里不需要自己搞归一化,代码里的滑动窗口已经把数据切成70%训练+15%验证+15%测试。突然想改比例?直接Ctrl+F搜"trainRatio=0.7"随便改。
模型架构才是重头戏。TCN部分用了膨胀因果卷积,像叠望远镜似的逐层扩大感受野:
layers = [
sequenceInputLayer(1) % 单变量输入
convolution1dLayer(3, 64, 'DilationFactor', 1, 'Padding', 'same')
reluLayer
convolution1dLayer(3, 64, 'DilationFactor', 2, 'Padding', 'same')
reluLayer
convolution1dLayer(3, 64, 'DilationFactor', 4, 'Padding', 'same')];
这三层卷积分别对应1、2、4的膨胀系数,相当于覆盖了7个时间步的历史信息。紧接着BiGRU登场,正反两个方向的记忆门玩得飞起:
bilstmLayer(128,'OutputMode','sequence')
fullyConnectedLayer(50)
dropoutLayer(0.2)
fullyConnectedLayer(1)];
注意这里有个0.2的dropout,防过拟合的利器。训练时Adam优化器自己会调学习率,想要快点的可以改'MaxEpochs'参数,默认设的100轮其实够用。

跑完程序自动弹七八张图。这张预测效果对比图最带感,蓝线是真实值,红线预测值贴得那叫个紧:
TCN-BiGRU回归 基于时间卷积神经网络(TCN)-双向门控循环单元(BiGRU)的数据回归预测(可以更换为单变量时序预测/回归,前私我),Matlab代码,可直接运行,适合小白新手 程序已经调试好,无需更改代码替换数据集即可运行数据格式为excel 1、运行环境要求MATLAB版本为2022b及其以上 2、评价指标包括:R2、MAE、MSE、RPD、RMSE等,图很多,符合您的需要 3、代码中文注释清晰,质量极高 4、测试数据集,可以直接运行源程序 替换你的数据即可用 适合新手小白 5、 保证源程序运行,

![预测效果图示例]
重点看RPD指标(别处少见),超过1.8说明模型靠谱。指标表格里MSE和RMSE双杀,R²居然干到0.97,这表现放在kaggle也能打。

想要魔改?代码里标注了【可修改区域】的部分随便造。比如把BiGRU换成普通LSTM,或者给TCN加残差连接。实测batch_size调到32能加速,但显存不够的笔记本小心崩。
最后说个坑:2022b以下版本运行可能会报错,主要是新的dlarray数据类型整的幺蛾子。解决方案要么升级Matlab,要么把输入数据手动转成旧版格式——不过咱代码包里已经处理好了这些破事。
更多推荐
所有评论(0)