【lssvm预测】基于飞蛾扑火算法改进的最小二乘支持向量机lssvm预测matlab源码
作者:互联网
【lssvm预测】基于飞蛾扑火算法改进的最小二乘支持向量机lssvm预测matlab源码
1 模型介绍
1.1 LSSVM的特性
-
同样是对原始对偶问题进行求解,但是通过求解一个线性方程组(优化目标中的线性约束导致的)来代替SVM中的QP问题(简化求解过程),对于高维输入空间中的分类以及回归任务同样适用;
-
实质上是求解线性矩阵方程的过程,与高斯过程(Gaussian processes),正则化网络(regularization networks)和费雪判别分析(Fisher discriminant analysis)的核版本相结合;
-
使用了稀疏近似(用来克服使用该算法时的弊端)与稳健回归(稳健统计);
-
使用了贝叶斯推断(Bayesian inference);
-
可以拓展到非监督学习中:核主成分分析(kernel PCA)或密度聚类;
-
可以拓展到递归神经网络中。
1.2 LSSVM用于分类任务
-
优化目标
-
拉格朗日乘子法
其中α i \alpha_iαi是拉格朗日乘子,也是支持值(support values)
-
求解最优化条件
-
求解对偶问题(与SVM同样不对w ww和e ee做任何计算)
LLSVM通过求解上述线性方程组,得到优化变量a aa和b bb的值,这种求解方式比求解QP问题更加简便
-
与标准SVM的区别
a. 使用等式约束,而不是不等式约束; b. 由于对每个样本点采用了等式约束,因此对松弛向量不施加任何约束,这也是LSSVM丢失稀疏性的重要原因; c. 通过解决等式约束以及最小二乘问题,使得问题得到进一步简化。
1.3 LSSVM用于回归任务
-
问题描述
-
优化目标
-
求解对偶问题(与SVM同样不对w ww和e ee做任何计算)
LLSVM通过求解上述线性方程组,得到优化变量a aa和b bb的值,这种求解方式比求解QP问题更加简便
1.4 LSSVM的弊端
注意到解决分类任务时,在求解最优化过程中得到α i = γ e i \alpha{i}=\gamma{e{i}}αi=γei,由于拉格朗日乘子法中对应于等式约束的拉格朗日乘子α i ≠ 0 \alpha_{i}\neq{0}αi̸=0,因此全部训练样本都会被作为支持向量来看待,这就会导致其丧失SVM原有的稀疏性质,但是还可以通过对训练集进行基于支持度的“减枝”(pruning)处理来达到稀疏化的目的,这一步也可以看做是一种稀疏近似(sparse approximate)操作。
1.5 飞蛾扑火优化算法
飞蛾扑火优化(Moth-flame optimization,MFO),由Seyedali Mirjalili在2015年提出,为优化领域提供了一种新的启发式搜索范式:螺旋搜索。
飞蛾在夜间有一种特殊的导航方式:横向定向。即它会与月亮(光源)保持一定的角度飞行,从而能够保持直线的飞行路径,但是,这种方式只在光源离飞蛾较远的情况下才有效。当有人造光源存在时,飞蛾会被人工灯光所欺骗,一直保持与人造灯光相同的角度飞行,由于它与光源的距离过近,它飞行的路径已经不是直线,而是一种螺旋的路径。
受这种自然现象的启发,Seyedali Mirjalili将飞蛾绕着光源螺旋飞行的过程抽象成为一个寻优的过程,飞蛾飞行的整个空间即是问题的解空间,一只飞蛾即是问题的一个解,而火焰(光源)即是问题的一个较优解,每一只飞蛾对应一个光源,避免了算法陷入局部最优;当飞蛾与火焰足够多的时候,飞蛾的飞行能够搜索解空间的绝大部分区域,从而保证了算法的探索能力;而在寻优的过程中,火焰数随着迭代次数的增加而减少,使飞蛾能够充分搜索更优解的邻域空间,保证了算法的利用能力。
正是基于以上特点,MFO在探索与利用之间找到了平衡,从而使算法在优化问题中有一个较好的效果。
总的来说MFO也是一种基于种群的随机启发式搜索算法,它与PSO、GSA等算法最大的区别就在于其粒子搜索路径是螺旋形的,粒子围绕着更优解以一种螺旋的方式移动,而不是直线移动。
MFO的过程如下: 1.初始化飞蛾种群 2.对飞蛾种群进行适应度评价 3.重复如下过程直到达到停止标准: 3.1自适应更新火焰个数n,当迭代次数为1时,飞蛾个数即为火焰个数 3.2对飞蛾种群适应度进行排序,取出适应度较好的n个飞蛾作为火焰 3.3更新飞蛾的搜索参数。 3.4根据每只飞蛾对应的火焰与飞行参数更新飞蛾的位置 4.输出所得最优解(火焰)
具体的飞蛾位置更新公式见论文:Moth-flame optimization algorithm: A novel nature-inspired heuristic paradigm
2 部分代码
%===================================================================== %初始化 clc close all clear format long tic %============================================================== %%导入数据 data=xlsread('1.xlsx'); [row,col]=size(data); x=data(:,1:col-1); y=data(:,col); set=1; %设置测量样本数 row1=row-set;% train_x=x(1:row1,:); train_y=y(1:row1,:); test_x=x(row1+1:row,:);%预测输入 test_y=y(row1+1:row,:);%预测输出 train_x=train_x'; train_y=train_y'; test_x=test_x'; test_y=test_y'; %%数据归一化 [train_x,minx,maxx, train_yy,miny,maxy] =premnmx(train_x,train_y); test_x=tramnmx(test_x,minx,maxx); train_x=train_x'; train_yy=train_yy'; train_y=train_y'; test_x=test_x'; test_y=test_y'; %% 参数初始化 eps = 10^(-6); %%定义lssvm相关参数 type='f'; kernel = 'RBF_kernel'; N=20; % Number of search agents Max_iteration=100; % Maximum numbef of iterations Leader_pos=zeros(1,dim); Leader_score=inf; %change this to -inf for maximization problems %Initialize the positions of search agents % for i=1:SearchAgents_no % Positions(i,1)=ceil(rand(1)*(ub(1)-lb(1))+lb(1)); % Positions(i,2)=ceil(rand(1)*(ub(2)-lb(2))+lb(2)); % end %% 结果分析 plot( Convergence_curve,'LineWidth',2); title(['飞蛾扑火优化算法适应度曲线','(参数c1=',num2str(Best_flame_pos(1)),',c2=',num2str(Best_flame_pos(2)),',终止代数=',num2str(Max_iteration),')'],'FontSize',13); xlabel('进化代数');ylabel('误差适应度'); bestc = Best_flame_pos(1); bestg = Best_flame_pos(2); gam=bestc; sig2=bestg; model=initlssvm(train_x,train_yy,type,gam,sig2,kernel,proprecess);%原来是显示 model=trainlssvm(model);%原来是显示 %求出训练集和测试集的预测值 [train_predict_y,zt,model]=simlssvm(model,train_x); [test_predict_y,zt,model]=simlssvm(model,test_x); %预测数据反归一化 train_predict=postmnmx(train_predict_y,miny,maxy);%预测输出 test_predict=postmnmx(test_predict_y,miny,maxy); %计算均方差 trainmse=sum((train_predict-train_y).^2)/length(train_y); %testmse=sum((test_predict-test_y).^2)/length(test_y) for i=1:set RD(i)=(test_predict(i)-test_y(i))/test_y(i)*100; end for i=1:set D(i)=test_predict(i)-test_y(i); end RD=RD' disp(['飞蛾扑火优化算法优化svm预测误差=',num2str(D)]) figure plot(train_predict,':og') hold on plot(train_y,'- *') legend('预测输出','期望输出') title('飞蛾扑火优化svm网络预测输出','fontsize',12) ylabel('函数输出','fontsize',12) xlabel('样本','fontsize',12) toc %计算时间
3 仿真结果
4 参考文献
[1]张儒, 叶向荣, 王可,等. 基于最小二乘支持向量机和粒子群法的水煤浆性能优化.
标签:飞蛾,求解,predict,test,train,lssvm,飞蛾扑火,优化,源码 来源: https://blog.csdn.net/qq_59747472/article/details/120622049