双向BiGRU做单输入单输出时间序列预测模型,直接替换数据就可以用。 程序语言是matlab,需求最低版本为2020及以上。 程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替换就可以得到自己满意的效果。
搞时间序列预测的小伙伴看过来!今天咱们折腾个双向BiGRU模型,直接上Matlab2020+环境就能跑。这个模板最大的好处就是数据替换贼方便,把你的csv/excel数据往里面一怼就能出结果。
先看核心代码结构:
% 数据预处理 data = readmatrix('your_data.csv'); % 单列时间序列 lag = 12; % 滞后步长自定义 [input, output] = createDataset(data, lag); % 自动生成训练集 [inputs, outputs] = normalizeData(input, output); % 自动归一化 % 网络结构(重点!) layers = [ ... sequenceInputLayer(1) bilstmLayer(128,'OutputMode','sequence') fullyConnectedLayer(64) dropoutLayer(0.2) fullyConnectedLayer(1) regressionLayer];这个双向BiGRU结构用了128神经元的双向记忆层,注意中间的dropout层能有效防止过拟合。数据归一化用了mapminmax函数,自动把数据压缩到[-1,1]区间,这对时间序列预测效果提升很明显。
训练参数设置也有讲究:
options = trainingOptions('adam', ... 'MaxEpochs',200, ... 'MiniBatchSize',32, ... 'InitialLearnRate',0.001,... 'Plots','training-progress');这里用了自适应学习率的adam优化器,200轮训练基本能收敛。实际跑的时候如果发现验证集损失震荡,可以把学习率调到0.0005试试。
双向BiGRU做单输入单输出时间序列预测模型,直接替换数据就可以用。 程序语言是matlab,需求最低版本为2020及以上。 程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替换就可以得到自己满意的效果。
结果可视化部分才是重头戏:
% 预测结果反归一化 real_values = mapminmax('reverse', outputs, ps_output); predict_values = mapminmax('reverse', YPred, ps_output); % 画真实值-预测值对比 plot(real_values(50:end),'b'); hold on; plot(predict_values(50:end),'r');这段代码生成的对比图能直观看出预测曲线和真实曲线的贴合程度。注意前50个数据点被截掉了,主要是排除序列初始化阶段的波动干扰。
评价指标计算模块直接甩出硬核数据:
RMSE = sqrt(mean((real_values - predict_values).^2)); fprintf('R方:%.3f MAE:%.3f RMSE:%.3f\n',... R2, MAE, RMSE);输出的指标里R²值特别重要,超过0.9说明模型抓规律能力不错。不过要注意,如果数据本身噪声太大,可能需要先做小波去噪之类的预处理。
最后说几个实战技巧:
- 数据量小于1000条时,把bilstmLayer的神经元数砍半
- 遇到预测值滞后的问题,试试在损失函数里加入DTW动态时间规整
- 季节型数据建议在输入层之前加周期特征编码
模型不一定次次都灵,但作为baseline绝对够用。关键还是得理解自己的数据特性,必要时把双向层换成注意力机制或者混合CNN结构,说不定有惊喜。代码拿回去跑不通的话,重点检查数据是不是单列、有没有缺失值这些基本问题。