一、麻雀算法优化LSSVM简介

1 标准麻雀算法

算法运算过程由探索者、追随者与预警者3部分构成,其中探索者与追随者的总数量与比例不变,根据适应度数值的改变,两者可以相互转化。通过觅食和反捕食行为来不断更新种群成员最优位置。

设种群数量为n,在第K次迭代中,探索者的位置更新方式如下:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_支持向量机

追随者的位置更新方式如下:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_支持向量机_02

预警者在种群中的比例在10%~20%,位置更新方式如下:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_算法优化_03

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及其约束条件为:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_算法_04

为求解上述优化问题,构造相应的拉格朗日函数,进行如下变换:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_matlab_05

对式(3)中ω、b、e、α的分别求偏导,令导数为0,消除ω和ei,可得到线性方程组:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_优化算法_06

最终得到LSSVM回归函数:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_优化算法_07

本文中采用径向基(radial basis function, RBF)核函数,与其他核函数相比,RBF核函数能够实现非线性映射,且需计算的参数较少,其表达式为:

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_算法_08

式中:σ为核函数参数。

3 麻雀算法优化LSSVM流程图

建立预测模型的具体流程如图4所示,算法步骤如下。

  1. 辅助变量选择及预处理,并利用PCA进行降维。
  2. 初始化相关参数,利用改进的麻雀优化算法对LSSVM中的关键参数进行优化。
  3. 初始化种群,利用式(11),引入Logistic映射,提升初始种群分布均匀性。
  4. 根据目标函数计算适应度值并排序。利用引入自适应权重公式(12)更新探索者位置。
  5. 利用式(8)及(9)更新追随者及警戒者位置。
  6. 判断是否停止,执行退出或继续循环。
  7. 输出正则化参数与RBF核函数参数,LSSVM利用最优超参数进行数据预测。
    【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_支持向量机_09

二、部分源代码

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麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_算法优化_10

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_matlab_11

【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】_优化算法_12

四、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)