时序预测 | MATLAB实现SSA-KELM和KELM麻雀算法优化核极限学习机时间序列预测

时序预测 | MATLAB实现SSA-KELM和KELM麻雀算法优化核极限学习机时间序列预测

预测效果

1
2
3
4

基本介绍

MATLAB实现SSA-KELM和KELM麻雀算法优化核极限学习机时间序列预测,运行环境Matlab2018b及以上。核极限学习机(Kernel Based Extreme Learning Machine,KELM)是基于极限学习机(Extreme Learning Machine,ELM)并结合核函数所提出的改进算法,KELM 能够在保留 ELM 优点的基础上提高模型的预测性能。麻雀算法优化两个参数,正则化系数 C 和核函数参数 S。命令窗口输出MAE、MAPE、MSE、RMSE和R2。

模型描述

麻雀搜索算法是一种群智能优化算法,在麻雀觅食的过程中,分为发现者和加入者,发现者在种群中负责寻找食物并为整个麻雀种群提供觅食区域和方向,而加入者则是利用发现者来获取食物。为了获得食物,麻雀通常可以采用发现者和加入者这两种行为策略进行觅食。种群中的个体会监视群体中其它个体的行为,并且该种群中的攻击者会与高摄取量的同伴争夺食物资源,以提高自己的捕食率。此外,当麻雀种群受到捕食者的攻击时会做出反捕食行为。

5

基于用 SSA 优化的 KELM 的模型(SSA-KELM)优于其他模型。所提出的混合模型结构简单、学习速度快、泛化性能好,能够成功克服数据的非平稳性、随机性和非线性,值得推广应用。

程序设计

% 训练集
P_train = P(1:trainNum, :)';
T_train = T(1:trainNum, :)';
% 测试集
P_test = P(trainNum+1:trainNum+testNum,:)';
T_test = T(trainNum+1:trainNum+testNum,:)';

%% 归一化
[Pn_train ,ps]= mapminmax(P_train, 0, 1);
[Tn_train, ts] = mapminmax(T_train, 0, 1);
%测试集的归一化
Pn_test = mapminmax('apply', P_test, ps);
Tn_test = mapminmax('apply', T_test, ts);

%% 麻雀参数设置
pop=20; %种群数量
Max_iteration=50; %  设定最大迭代次数
dim = 2;% 维度为2,即优化两个参数,正则化系数 C 和核函数参数 S
lb = [0.001,0.001];%下边界
ub = [50,50];%上边界
fobj = @(x) fun(x,Pn_train,Tn_train,Pn_test,T_test,ts);
[Best_pos,Best_score,SSA_curve]=SSA(pop,Max_iteration,lb,ub,dim,fobj); %开始优化
figure
plot(SSA_curve,'linewidth',1.5);
grid on;
xlabel('迭代次数')
ylabel('适应度值')
title('麻雀收敛曲线')

%% 获取最优正则化系数 C 和核函数参数 S
Regularization_coefficient = Best_pos(1);
Kernel_para = Best_pos(2);
Kernel_type = 'rbf';
%% 训练
[~,OutputWeight] = kelmTrain(Pn_train,Tn_train,Regularization_coefficient,Kernel_type,Kernel_para);
%% 测试
InputWeight = OutputWeight;
[TestOutT] = kelmPredict(Pn_train,InputWeight,Kernel_type,Kernel_para,Pn_test);
TestOutT = mapminmax('reverse',TestOutT,ts);

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501

猜你喜欢

转载自blog.csdn.net/kjm13182345320/article/details/128637768