这段代码实现了一个基于改进鲸鱼优化算法(GSWOA)优化支持向量回归(SVR)的时间序列预测模型。
1. 研究背景
在时间序列预测任务中,支持向量回归(SVR)因其良好的泛化能力被广泛应用。但SVR的性能高度依赖于其超参数(如惩罚系数c和核参数g)的选择,传统的手动调参或网格搜索效率低、易陷入局部最优。
鲸鱼优化算法(WOA)是一种模拟座头鲸捕食行为的元启发式算法,具有结构简单、收敛快的特点。为提升其全局搜索能力和收敛精度,该代码对WOA进行了三项改进:自适应权重、变螺旋形状、最优邻域扰动,形成GSWOA(改进鲸鱼优化算法),用于自动搜索SVR的最优超参数,构建高精度的预测模型。
2. 主要功能
- 数据预处理 :读取Excel数据,将单变量时间序列重构为多步输入-单步输出的监督学习格式(使用
kim历史步长,预测未来zim步)。 - 数据集划分:按7:3比例划分训练集与测试集。
- 数据归一化 :使用
mapminmax将输入输出归一化到[0,1]。 - 参数优化 :通过GSWOA算法自动寻优SVR的两个关键参数:
c(惩罚系数)和g(核函数参数)。 - 模型训练与预测:基于最优参数训练SVR模型,并对训练集与测试集进行预测。
- 结果评估:计算RMSE、MSE、MAE、MAPE、R²、RPD等多项指标,并绘制适应度曲线、回归图、误差图、拟合效果图等可视化结果。
3. 算法步骤
- 数据重构 :将原始时间序列
result按照kim(历史步长)和zim(预测步长)构造成(样本数, kim*特征数+1)的监督矩阵。 - 归一化与数据集划分。
- GSWOA参数优化 :
- 初始化种群位置(每个位置对应一组
(c,g))。 - 对每个个体解码并训练SVR,以训练集预测误差(均方误差)作为适应度值。
- 根据改进后的鲸鱼捕食机制更新位置。
- 加入最优邻域扰动,跳出局部最优。
- 迭代更新全局最优解。
- 初始化种群位置(每个位置对应一组
- 模型训练与预测 :使用最优
(c,g)建立SVR模型,对训练集和测试集进行预测。 - 反归一化与指标计算:将预测值还原为原始尺度,并计算多种误差与拟合指标。
- 结果可视化。
4. 技术路线
原始数据 → 监督学习重构 → 归一化 → GSWOA优化SVR超参数 → 构建最优SVR模型 → 预测 → 反归一化 → 误差评估与可视化
该路线将元启发式优化 与机器学习模型相结合,实现自动化超参数调优,避免人工试错。
5. 公式原理
(1)鲸鱼优化算法(WOA)原始公式
- 包围猎物:
D=∣C⋅X∗(t)−X(t)∣,X(t+1)=X∗(t)−A⋅D D = |C \cdot X^*(t) - X(t)|, \quad X(t+1) = X^*(t) - A \cdot D D=∣C⋅X∗(t)−X(t)∣,X(t+1)=X∗(t)−A⋅D - 气泡网攻击:
X(t+1)=D′⋅ebl⋅cos(2πl)+X∗(t) X(t+1) = D' \cdot e^{bl} \cdot \cos(2\pi l) + X^*(t) X(t+1)=D′⋅ebl⋅cos(2πl)+X∗(t) - 随机搜索:
X(t+1)=Xrand−A⋅∣C⋅Xrand−X(t)∣ X(t+1) = X_{\text{rand}} - A \cdot |C \cdot X_{\text{rand}} - X(t)| X(t+1)=Xrand−A⋅∣C⋅Xrand−X(t)∣
(2)GSWOA改进点
- 自适应权重 w = 1 - \\frac{t}{Max_iter} ,在包围捕食阶段调整当前最优位置的影响:
X(t+1)=w⋅X∗(t)−A⋅D X(t+1) = w \cdot X^*(t) - A \cdot D X(t+1)=w⋅X∗(t)−A⋅D - 变螺旋形状 :螺旋常数bspiral=1+tMax_iterb_{\text{spiral}} = 1 + \frac{t}{Max\_iter}bspiral=1+Max_itert,使搜索前期探索性强,后期开发性增强。
- 最优邻域扰动 :以当前最优解为中心,生成高斯扰动新解,若更优则替换,避免局部最优:
Xnew=Xbest+σ⋅N(0,1),σ∝(1−t/T) X_{\text{new}} = X_{\text{best}} + \sigma \cdot \mathcal{N}(0,1), \quad \sigma \propto (1 - t/T) Xnew=Xbest+σ⋅N(0,1),σ∝(1−t/T)
(3)SVR
采用ε-SVR模型(-s 3),核函数为RBF(-t 2),通过优化c和g控制模型复杂度与回归精度。
6. 参数设定
| 参数名 | 值 | 说明 |
|---|---|---|
kim |
2 | 历史时间步长 |
zim |
1 | 预测步长 |
num_size |
0.7 | 训练集比例 |
pop |
20 | 种群规模 |
Max_iteration |
30 | 最大迭代次数 |
lb |
[0.1, 0.1] | c和g的下界 |
ub |
[800, 800] | c和g的上界 |
dim |
2 | 优化变量个数 |
| SVR参数 | -t 2 -s 3 -p 0.01 |
RBF核,ε-SVR,损失函数参数 |
7. 运行环境
- MATLAB版本:建议 R2020b
8. 应用场景
该方法适用于小样本、非线性、高噪声的时间序列预测任务,典型应用包括:
- 金融时间序列预测(股票、汇率)
- 电力负荷预测
- 工业过程关键指标预测(如能耗、产量)
- 环境监测数据预测(空气质量、水位)
- 设备故障趋势预测

