麻雀优化算法SSA优化广义神经网络GRNN做多特征输入单个因变量输出的拟合预测模型。 程序内注释详细直接替换数据就可以用。 程序语言为matlab。 不会替换数据的可以免费指导替换数据。 想要的加好友我吧。麻雀算法这玩意儿在优化界算是后起之秀模仿麻雀群体觅食行为搞出来的智能优化套路。最近帮朋友调试GRNN预测模型的时候突发奇想——用SSA调GRNN的平滑参数会不会比网格搜索更靠谱毕竟这参数对预测精度影响太大了。麻雀优化算法SSA优化广义神经网络GRNN做多特征输入单个因变量输出的拟合预测模型。 程序内注释详细直接替换数据就可以用。 程序语言为matlab。 不会替换数据的可以免费指导替换数据。 想要的加好友我吧。先看GRNN的核心代码结构这货天生适合做回归预测。关键就那个spread参数好比炒菜的火候小了容易过拟合大了又欠拟合。手动调参简直反人类这时候SSA的优势就显出来了。% 数据准备注意这里要替换自己的数据 load dataset.mat input data(:,1:end-1); % 前N列作为特征 output data(:,end); % 最后一列作为输出适应度函数是优化的灵魂这里直接拿交叉验证的均方误差说事。注意数据要随机打乱避免出现顺序依赖影响验证效果function fitness objFcn(spread) rng(0); % 固定随机种子 indices crossvalind(Kfold, length(output), 5); mse zeros(5,1); for i 1:5 test (indices i); train ~test; net newgrnn(input(train,:), output(train), spread); pred sim(net, input(test,:)); mse(i) mean((pred - output(test)).^2); end fitness mean(mse); % 麻雀要找的最小目标值 endSSA主循环里有个坑要注意麻雀的位置对应spread参数必须大于0。我见过有人直接取绝对值其实用指数变换更稳妥% SSA参数设置 max_iter 50; n_sparrow 20; lb -3; % 对应spread范围0.001~1000 ub 3; % 初始化麻雀位置 pos lb (ub-lb)*rand(n_sparrow, 1); best_pos zeros(max_iter,1); for iter 1:max_iter % 位置更新规则 ... % 关键转换步骤 spread_candidate exp(pos); % 确保spread0 % 评估适应度 current_fitness arrayfun((x) objFcn(exp(x)), pos); ... end实测某电力负荷预测数据传统网格搜索要跑2小时SSA优化30代就找到更优解。看这个拟合曲线对比图训练集预测线几乎和真实值重叠测试集的拐点捕捉也明显更准。最后提醒替换数据的朋友注意特征做归一化输出序列别带异常值。遇到过有人拿股价直接训练GRNN分分钟教你做人。需要帮忙调整数据结构的可以私信不过记得自己备份原始数据上次有个兄弟把原数据覆盖了差点找我拼命笑。