核心内容摘要
91n:解码无限可能,开启数字新纪元
天鹰优化算法AO优化ELM神经网络的权值和阈值参数做多输入单输出的拟合预测建模。
程序内注释详细直接替换数据就可以使用。
程序语言为matlab。
程序直接运行可以出拟合预测图迭代优化图线性拟合预测图多个预测评价指标。
想要的加好友我吧。
PS:以下效果图为测试数据的效果图主要目的是为了显示程序运行可以出的结果图具体预测效果以个人的具体数据为准。
由于每个人的数据都是独一无二的因此无法做到可以任何人的数据直接替换就可以得到自己满意的效果。
最近在折腾预测模型时发现极限学习机ELM虽然训练快但随机初始化的权值和阈值容易让结果坐过山车。
试了十几种优化算法发现天鹰优化器Aquila Optimizer, AO在调参上居然比粒子群还猛——关键是MATLAB代码实现起来特别省事。
天鹰优化算法AO优化ELM神经网络的权值和阈值参数做多输入单输出的拟合预测建模。
程序内注释详细直接替换数据就可以使用。
程序语言为matlab。
程序直接运行可以出拟合预测图迭代优化图线性拟合预测图多个预测评价指标。
想要的加好友我吧。
PS:以下效果图为测试数据的效果图主要目的是为了显示程序运行可以出的结果图具体预测效果以个人的具体数据为准。
由于每个人的数据都是独一无二的因此无法做到可以任何人的数据直接替换就可以得到自己满意的效果。
直接上干货咱们先看代码骨架%% 天鹰优化ELM主函数 function AO_ELM() % 读取数据替换成自己的data.csv data readmatrix(data.csv); input data(:,1:end-
; output data(:,end); % 参数设置 numSearchAgents 20; % 天鹰种群数量 maxIter 100; % 最大迭代次数 inputSize size(input,
; hiddenSize 10; % 隐层节点数 % AO优化ELM [bestWeights, bestThreshold, convergenceCurve] AO(input, output, inputSize, hiddenSize, numSearchAgents, maxIter); % 预测与绘图 predictAndPlot(bestWeights, bestThreshold, input, output); end这段代码的关键在于AO函数内部怎么玩转ELM的权值矩阵。
天鹰算法的核心是模拟猛禽捕猎时的俯冲和包围策略对应到代码里就是位置更新的两种模式% AO位置更新片段简化版 for i1:numSearchAgents if rand
5 % 俯冲策略利用Levy飞行进行全局搜索 step levyFlight(); newPos currentPos step.*(bestPos - currentPos); else % 包围策略局部精细搜索 radius mean(bestPos) * rand; newPos bestPos radius.*randn(size(bestPos)); end end适应度函数这里有个小技巧——直接用ELM的输出误差作为优化目标function fitness getFitness(position, input, output, inputSize, hiddenSize) % 拆分位置向量为输入权值和阈值 W reshape(position(1:inputSize*hiddenSize), hiddenSize, inputSize); B position(inputSize*hiddenSize1:end); % ELM训练 H elmHiddenLayer(input, W, B); beta pinv(H) * output; % 计算RMSE pred H * beta; fitness sqrt(mean((pred - output).^
); end运行完优化后预测部分要注意反标准化。
这里用了线性回归图来直观显示预测值和真实值的相关性% 预测结果绘图片段 plotregression(target, predict); title(线性拟合效果); xlabel(实际值); ylabel(预测值); grid on;效果图上那个迭代曲线特别重要——如果曲线在20代以后还没收敛可能需要调大maxIter或者增加种群数量。
测试时发现对于有噪声的数据把天鹰的Levy飞行参数调高能避免早熟。
最后给个评价指标计算的彩蛋R2 1 - sum((target-predict).^
/sum((target-mean(target)).^
; fprintf(R方:%.4f RMSE:%.4f\n, R2, rmse);
注意事项输入数据建议先做归一化ELM对尺度敏感隐层节点数别贪多
个足够否则可能过拟合替换数据时保持格式为[特征列... , 目标列]想调参的话优先动Levy飞行的步长参数。
效果图里那个预测曲线看着顺滑实际跑工业数据可能会有点毛刺——别慌这是优化器在努力逼近真实规律呢。
需要完整代码的私记得备注来意~