核心内容摘要
AR虚拟形象赋能软件测试开发者IP:2026元宇宙营销战略
PSO-GRU多变量回归预测粒子群优化门控循环单元(Matlab) 所有程序经过验证保证有效运行。
data为数据集输入7个特征输出一个变量。
PSO_GRU.m为程序主文件fitness为函数文件无需运行。
命令窗口输出R
MAE和RMSE。
粒子群优化门控循环单元,优化隐含层单元数量和初始学习率。
注意程序和数据放在一个文件夹运行环境为Matlab2020及以上.打开Matlab敲下这行代码时窗外的麻雀突然扑棱棱飞走了。
搞时序预测的都知道GRU这种递归网络能抓时间依赖但超参数调起来真是要命。
今天就带你们玩点有意思的——用粒子群算法给GRU做自动调参。
老规矩先看数据。
7个特征列加1个目标值这种多变量回归场景在工程上太常见了。
咱们先上硬菜data xlsread(data.xlsx); input data(:,1:
; output data(:,
; [p_train, ps_input] mapminmax(input(:,1:
); [t_train, ps_output] mapminmax(output(:,1:
);这段归一化操作看着简单但要注意mapminmax默认按行处理。
转置后每列才是一个样本确保时间步对齐。
接下来构建GRU骨架numFeatures 7; numHiddenUnits optimVars(
; % 这是PSO要优化的重头戏 layers [... sequenceInputLayer(numFeatures) gruLayer(numHiddenUnits) fullyConnectedLayer(
regressionLayer];粒子群在这里可不是吃素的。
咱们的fitness函数里藏着玄机——每次迭代都要重新初始化网络options trainingOptions(adam, ... InitialLearnRate,optimVars(
, ... MaxEpochs,200,... ExecutionEnvironment,cpu); net trainNetwork(p_train,t_train,layers,options);初始学习率这个参数特别矫情设大了震荡小了收敛慢。
用PSO同时调单元数和学习率相当于给网络装了个自适应巡航。
PSO-GRU多变量回归预测粒子群优化门控循环单元(Matlab) 所有程序经过验证保证有效运行。
data为数据集输入7个特征输出一个变量。
PSO_GRU.m为程序主文件fitness为函数文件无需运行。
命令窗口输出R
MAE和RMSE。
粒子群优化门控循环单元,优化隐含层单元数量和初始学习率。
注意程序和数据放在一个文件夹运行环境为Matlab2020及以上.粒子群设置这块别手软options optimoptions(particleswarm,... SwarmSize,20,... MaxIterations,50,... Display,iter); lb [10
001]; % 单元数下限10学习率不低于
001 ub [100
1]; % 单元数上限100学习率不高于
1跑完优化再看结果命令行跳出来的R²让人舒坦最优参数: 单元数58 学习率
023 R2:
967 MAE:
32 RMSE:
45这比网格搜索快多了不是最后来个预测对比图更直观predicted predict(net,p_test); plot(t_test(1:
,b) hold on plot(predicted(1:
,r--)蓝色实线是真值红色虚线是预测。
两条线贴得越紧说明R²越靠谱。
不过要注意粒子群容易早熟遇到平台期时不妨把惯性权重从
9调到
4试试。
整套代码跑下来大概半小时配置差的电脑记得备个散热器。
数据量大的话可以把GRU换成双向结构不过那又是另一个故事了。