VMD滚动分解+BiLSTM多变量时序预测,防信息泄露,MATLAB代码
功能概述该代码实现了一种基于变分模态分解VMD与双向长短期记忆网络BiLSTM的滚动多变量时间序列预测方法专门用于防止在时间序列预测中因使用未来数据而导致的信息泄露问题。核心思想为在预测未来每一步时仅使用截至当前时刻的已知数据重新进行模态分解再对每个模态分别建模预测最后集成重构从而保证模型的真实可用性与泛化能力。主要功能对目标时间序列进行在线滚动 VMD 分解随新数据到来动态更新分解结果。为每个 VMD 分解出的本征模态函数IMF训练独立的 BiLSTM 网络。利用历史多变量特征含目标变量历史值构造滑动窗口输入预测未来单步或多步目标值。评估模型在测试集上的 RMSE、MAE、MAPE、R² 指标并提供丰富的可视化图表。算法步骤与技术路线1. 数据准备与初始划分读取 Excel 数据data.xlsx前四列为特征 A~D第五列为待预测目标 E。按时间顺序划分训练集前 70%和测试集后 30%初始时仅训练集目标值对模型已知。2. 滚动分解预测循环逐测试点推进对于每一个测试点t1,2t 1, 2t1,2,…\dots…,NtestN_{\text{test}}NtestVMD 分解对当前累积已知目标序列执行 VMD得到KKK个 IMF 分量。模态独立建模对每个 IMF利用全部已知特征矩阵包含特征列与目标历史构造输入输出样本训练 BiLSTM 网络并预测未来第zimzimzim步的该模态值。模态集成将所有 IMF 预测值相加得到目标变量的最终预测值。数据集更新将当前测试点的真实值含所有特征与目标追加至已知数据池供下一轮分解与训练使用。3. 误差评估与结果可视化计算测试集上的 RMSE、MAE、MAPE、R²。绘制预测对比曲线、回归散点图、误差直方图、最后一次 VMD 分解子图、各模态预测贡献柱状图以及功率谱密度图。涉及公式与核心原理变分模态分解VMDVMD 将非平稳信号f(t)f(t)f(t)分解为KKK个具有稀疏中心频率的窄带 IMFuk(t)u_k(t)uk(t)求解如下约束变分问题min{uk},{ωk}{∑k1K∥∂t[(δ(t)jπt)∗uk(t)]e−jωkt∥22}s.t.∑k1Kukf(t) \min_{\{u_k\},\{\omega_k\}} \left\{ \sum_{k1}^{K} \left\| \partial_t \left[ \left( \delta(t) \frac{j}{\pi t} \right) * u_k(t) \right] e^{-j\omega_k t} \right\|_2^2 \right\} \quad \text{s.t.} \quad \sum_{k1}^{K} u_k f(t){uk},{ωk}min{k1∑K∂t[(δ(t)πtj)∗uk(t)]e−jωkt22}s.t.k1∑Kukf(t)引入二次惩罚因子α\alphaα与拉格朗日乘子λ\lambdaλ通过交替方向乘子法ADMM迭代求解。BiLSTM 预测模型BiLSTM 包含前向和后向 LSTM 层能够同时捕捉序列的过去与未来上下文信息训练时未来信息已知但预测时仅使用历史窗口输入。代码中采用OutputMode, last仅取最后时间步的双向输出。数据归一化使用mapminmax将输入与输出映射至[0,1][0,1][0,1]xnormx−xminxmax−xmin x_{\text{norm}} \frac{x - x_{\min}}{x_{\max} - x_{\min}}xnormxmax−xminx−xmin预测误差指标RMSE1n∑i1n(yi−y^i)2\sqrt{\frac{1}{n}\sum_{i1}^n (y_i - \hat{y}_i)^2}n1∑i1n(yi−y^i)2MAE1n∑i1n∣yi−y^i∣\frac{1}{n}\sum_{i1}^n |y_i - \hat{y}_i|n1∑i1n∣yi−y^i∣MAPE1n∑i1n∣yi−y^iyi∣×100%\frac{1}{n}\sum_{i1}^n \left|\frac{y_i - \hat{y}_i}{y_i}\right| \times 100\%n1∑i1nyiyi−y^i×100%R²1−∑(yi−y^i)2∑(yi−yˉ)21 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2}1−∑(yi−yˉ)2∑(yi−y^i)2参数设定一览参数名取值含义kim4历史窗口长度使用过去 4 步数据预测未来zim1预测步长预测未来 1 步目标值K_imf6VMD 分解模态个数alpha2000VMD 惩罚因子控制带宽约束强度tau0噪声容忍度通常为 0DC0是否保留直流分量0 为不保留init1初始化方式1 为随机初始化tol1e-7VMD 收敛容差train_ratio0.7初始训练集比例bilstm_units64BiLSTM 隐藏层单元数max_epochs200最大训练轮数mini_batch_size24批量大小initial_lr1e-3初始学习率随轮次下降LearnRateDropFactor0.2学习率下降因子LearnRateDropPeriod80学习率下降周期轮运行环境要求软件MATLAB建议 R2019b 及以上版本数据格式Excel 文件.xlsx第一行为表头数据列为连续数值型。应用场景该方法适用于对数据时效性要求严格、禁止未来信息泄露的中长期时间序列预测任务典型场景包括能源领域电力负荷预测、风电/光伏出力预测需逐日更新并重分解金融工程股票价格或波动率预测逐笔交易不可使用未来信息工业过程控制传感器信号趋势预测在线监测需滚动更新模型气象/环境气温、空气质量指数预报数据实时新增其滚动分解机制保证了模型在真实部署时能始终基于当前最新信息进行建模与预测避免了传统一次性全局分解可能引入的未来数据污染问题。完整代码私信VMD滚动分解BiLSTM多变量时序预测防信息泄露MATLAB代码