一、麻雀算法优化LSSVM简介
1 标准麻雀算法
算法运算过程由探索者、追随者与预警者3部分构成,其中探索者与追随者的总数量与比例不变,根据适应度数值的改变,两者可以相互转化。通过觅食和反捕食行为来不断更新种群成员最优位置。
设种群数量为n,在第K次迭代中,探索者的位置更新方式如下:
追随者的位置更新方式如下:
预警者在种群中的比例在10%~20%,位置更新方式如下:
2 最小二乘支持向量机(LSSVM)原理
传统SVM模型中约束条件为不等式,而LSSVM将SVM 中的约束条件改为等式约束,把误差平方和作为经验损失,将求解凸二次规划的问题转换为了通过求解线性方程组[13,14],降低了求解难度,优化了整体运算速度。
设定训练集{xi,yi}ni=1,其中xi∈Rd为输入变量,yi为第i个输出,yi∈R,通过非线性函数φ(·)将输入的n维空间映射到对应的高维特征空间,因此LSSVM的回归估计函数为:
f(x)=ωTφ(x)+b (1)
式中:ω=[ω1,ω2,…,ωn]T表示超平面权值系数向量;b为偏置量。
LSSVM定义优化问题目标函数J及其约束条件为:
为求解上述优化问题,构造相应的拉格朗日函数,进行如下变换:
对式(3)中ω、b、e、α的分别求偏导,令导数为0,消除ω和ei,可得到线性方程组:
最终得到LSSVM回归函数:
本文中采用径向基(radial basis function, RBF)核函数,与其他核函数相比,RBF核函数能够实现非线性映射,且需计算的参数较少,其表达式为:
式中:σ为核函数参数。
3 麻雀算法优化LSSVM流程图
建立预测模型的具体流程如图4所示,算法步骤如下。
- 辅助变量选择及预处理,并利用PCA进行降维。
- 初始化相关参数,利用改进的麻雀优化算法对LSSVM中的关键参数进行优化。
- 初始化种群,利用式(11),引入Logistic映射,提升初始种群分布均匀性。
- 根据目标函数计算适应度值并排序。利用引入自适应权重公式(12)更新探索者位置。
- 利用式(8)及(9)更新追随者及警戒者位置。
- 判断是否停止,执行退出或继续循环。
- 输出正则化参数与RBF核函数参数,LSSVM利用最优超参数进行数据预测。
二、部分源代码
clc;clear;close all;format compact
addpath(genpath('LSSVMlabv1_8'));
%%
data=xlsread('预测数据.xls','B2:K1000');
[x,y]=data_process(data,24);%前24个时刻 预测下一个时刻
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练,对最后30%进行预测
train_x=x(1:m,:);
test_x=x(m+1:end,:);
train_y=y(1:m,:);
test_y=y(m+1:end,:);
%% ssa优化lssvm 参数
typeID='function estimation';
kernelnamescell='RBF_kernel';
[x,trace]=ssa_lssvm(typeID,kernelnamescell,train_x,train_y,test_x,test_y);
figure;plot(trace);title('适应度曲线/mse')
%% 利用寻优得到的参数重新训练lssvm
disp('寻优得到的参数分别是:')
gam=x(1)
sig2=x(2)
model=initlssvm(train_x,train_y,typeID,gam,sig2,kernelnamescell);
model=trainlssvm(model);
y_pre_test=simlssvm(model,test_x);
% 反归一化
predict_value=mapminmax('reverse',y_pre_test',mappingy);
true_value=mapminmax('reverse',test_y',mappingy);
save ssa_lssvm predict_value true_value
disp('结果分析')
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])
mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])
fprintf('\n')
figure
plot(true_value,'r-','linewidth',3)
hold on
plot(predict_value,'b-','linewidth',3)
legend('实际值','预测值')
grid on
title('SSA-LSSVM')
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.
[6]仝卫国,郭超宇,赵如意.基于改进麻雀算法优化LSSVM的再循环箱浆液密度预测模型[J].电子测量技术. 2022,45(01)