目录
1.前言
BO-BiLSTM由双向长短期记忆网络(BiLSTM)与贝叶斯优化(Bayesian Optimization,BO)组合而成,面向一维时间序列预测任务。原始 BiLSTM 模型预测性能高度依赖超参数选取,如学习率、神经元数量、迭代轮数、序列窗口长度等;传统网格搜索、随机搜索遍历成本高、搜索效率低下。贝叶斯优化利用历史寻优信息构建代理模型,以采集函数平衡探索与利用,高效搜寻最优超参数组合。整体思路:以一维时序预测误差为目标函数,贝叶斯优化作为外层寻优框架,内层BiLSTM完成时序拟合与预测,迭代寻找最优超参,最终训练得到高精度时序预测模型。
2.算法测试效果图预览
figure
subplot(211);
plot(Nypre1,'g','linewidth',3)
hold on
plot(Lab_train,'b','linewidth',1)
legend('BO-BiLSTM预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
title(['训练集预测结果对比',' (RMSE= ' num2str(error1) ')' ])
subplot(212);
plot((Nypre1 - Lab_train)./Lab_train,'b.')
title('训练集误差')
ylabel('误差')
xlabel('样本')
xlim([1 M]);
ylim([-0.1,0.2]);
figure
subplot(211);
plot(Nypre2,'g','linewidth',3)
hold on
plot(Lab_test,'b','linewidth',1)
legend('BO-BiLSTM预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
title(['测试集预测结果对比',' (RMSE= ' num2str(error1) ')' ])
subplot(212);
plot((Nypre2 - Lab_test)./Lab_test,'b.')
title('测试集误差')
ylabel('误差')
xlabel('样本')
ylim([-0.1,0.2]);
figure;
plotregression(Lab_train,Nypre1,['训练集回归图']);
figure;
plotregression(Lab_test,Nypre2,['测试集回归图']);
3.算法运行软件版本
matlab2024B
4.算法理论概述
4.1 BiLSTM原理
一维时间序列定义:原始一维时序X=[x1,x2,...,xT],采用滑动窗口构造样本。设定输入窗口长度为L,预测步长为1,构造输入样本与标签:
4.2 贝叶斯优化(BO)
贝叶斯优化核心目标:在超参数空间H内寻找最优超参h*,最小化目标函数f(h)
目标函数f(h)代表给定超参h训练BiLSTM后模型在验证集上的预测误差,该函数无显式解析表达式,评估一次需要完整训练网络,计算开销大。
贝叶斯优化分为两大组成:高斯过程代理模型与采集函数。
高斯过程代理模型
采集函数
采集函数依据后验分布选取下一组待评估超参,平衡利用(选择当前预估最优区域)与探索(选择不确定性高的区域)。广泛使用期望改进准则EI:
4.3 BO-BiLSTM实现步骤
一维时间序列预处理
原始时序存在量纲差异,进行最大最小归一化消除尺度影响
利用滑动窗口构建监督学习样本,窗口长度L属于待优化超参数。划分训练集、验证集、测试集,验证集误差作为贝叶斯优化的目标函数。
定义超参数搜索空间H
确定需要优化的超参集合,典型待优化变量:BiLSTM单元数量num、学习率lr、序列窗口长度L、批次大小batch、迭代轮数epoch。
为每个变量设置合理上下界,形成连续/离散搜索区间。
定义贝叶斯优化目标函数f(h)
输入一组超参h,搭建对应结构BiLSTM,在训练集完成训练,输出验证集均方误差作为目标值:
初始化贝叶斯优化观测集
随机采样若干初始超参数组合h1,h2,...hn,依次训练BiLSTM得到目标函数值f1,f2,...,fn,初始化观测集合D={(hi,fi)}。
迭代贝叶斯寻优循环
获取最优超参数并构建最终预测模型
寻优结束选取观测集中满足h*=argmin f(h)的超参组合,利用全部训练数据搭建BiLSTM完整模型。
模型测试与反归一化预测结果
模型在测试集输出归一化预测值y',执行反归一化还原真实量纲: