⛄一、飞蛾扑火算法及LSSVM简介

1 飞蛾扑火算法简介
1.1 飞蛾扑火算法定义
飞蛾扑火优化(Moth-flame optimization,MFO),由Seyedali Mirjalili在2015年提出,为优化领域提供了一种新的启发式搜索范式:螺旋搜索。
飞蛾在夜间有一种特殊的导航方式:横向定向。即它会与月亮(光源)保持一定的角度飞行,从而能够保持直线的飞行路径,但是,这种方式只在光源离飞蛾较远的情况下才有效。当有人造光源存在时,飞蛾会被人工灯光所欺骗,一直保持与人造灯光相同的角度飞行,由于它与光源的距离过近,它飞行的路径已经不是直线,而是一种螺旋的路径。

受这种自然现象的启发,Seyedali Mirjalili将飞蛾绕着光源螺旋飞行的过程抽象成为一个寻优的过程,飞蛾飞行的整个空间即是问题的解空间,一只飞蛾即是问题的一个解,而火焰(光源)即是问题的一个较优解,每一只飞蛾对应一个光源,避免了算法陷入局部最优;当飞蛾与火焰足够多的时候,飞蛾的飞行能够搜索解空间的绝大部分区域,从而保证了算法的探索能力;而在寻优的过程中,火焰数随着迭代次数的增加而减少,使飞蛾能够充分搜索更优解的邻域空间,保证了算法的利用能力。
正是基于以上特点,MFO在探索与利用之间找到了平衡,从而使算法在优化问题中有一个较好的效果。
总的来说MFO也是一种基于种群的随机启发式搜索算法,它与PSO、GSA等算法最大的区别就在于其粒子搜索路径是螺旋形的,粒子围绕着更优解以一种螺旋的方式移动,而不是直线移动。

1.2 MFO过程
1.初始化飞蛾种群
2.对飞蛾种群进行适应度评价
3.重复如下过程直到达到停止标准:
3.1自适应更新火焰个数n,当迭代次数为1时,飞蛾个数即为火焰个数
3.2对飞蛾种群适应度进行排序,取出适应度较好的n个飞蛾作为火焰
3.3更新飞蛾的搜索参数。
3.4根据每只飞蛾对应的火焰与飞行参数更新飞蛾的位置
4.输出所得最优解(火焰)

2 LSSVM简介
2.1 最小二乘支持向量机LSSVM基本原理
最小二乘支持向量机是支持向量机的一种改进,它是将传统支持向量机中的不等式约束改为等式约束, 且将误差平方和(SumSquaresError)损失函数作为训练集的经验损失,这样就把解二次规划问题转化为求解线性方程组问题, 提高求解问题的速度和收敛精度。
常用的核函数种类:

2.2 LSSVM工具箱的使用方法
2.1 最小二乘支持向量机Matlab工具箱下载链接https://www.esat.kuleuven.be/sista/lssvmlab/(毫无疑问下载最新版本)
2.2 将LS-SVM文件添加到matlan使用路径中,便可直接使用。

具体使用步骤:
(1)导入训练数据:load 读取mat文件和ASCII文件;xlsread读取.xls文件;csvread读取.csv文件。
(2)数据预处理:效果是加快训练速度。
方法有:归一化处理(把每组数据都变为 - 1~ +1之间的数, 所涉及到的函数有premnmx, post mnmx, tramnmx)
标准化处理(把每组数据都化为均值为 0, 方差为 1的一组数据, 所涉及到的函数有 prestd,poatstd, trastd)
主成分分析 (进行正交处理, 减少输入数据的维数, 所涉及到的函数有 prepca, trapca)
(3)LS-SVM lab用于函数回归主要用到 3个函数, trainlssvm函数用来训练建立模型, simlssvm函数用于预估模型, plotlssvm函数是 LS-SVM lab工具箱的专用绘图函数。
(4) 参数说明:
A =csvread(′traindata. csv′);
Ptrain0=A(:, [ 1:13] );Ttrain0=A(:, [ 14:16);
[ Ptrain, meanptrain, stdptrain] = prestd(Ptrain0′);
[ Ttrain, meant , stdt] = prestd(T train0′);
Prestd()是数据归一化函数, 其中 meanptrain是未归一化数据之前的向量平均值 stdptrain是未归一化数据之前的向量标准差。
gam =10;sig2=0. 5;type=′function estimation′;
LS-SVM 要求调的参数就两个。 gam 和 sig2是最小二乘支持向量机的参数, 其中 gam 是正则化参数, 决定了适应误差的最小化和平滑程度, sig2是 RBF 函数的参数。 在工具箱中有一个函数 gridsearch可以在一定的范围内用来寻找最优的参数范围。 type有两种类型, 一种是 classfication, 用于分类, 一种是 function estimation, 用于函数回归。
[ alpha, b] =trainlssvm({Ptrain′, Ttrain′, type, gam, sig2,′RBF_kernel′, ′preprocess′});
alpha是支持向量, b是阈值. 。 preprocess是表明数据已经进行归一化, 也可以是′original ′, 表明数据没有进行归一化, 缺省时是′preprocess′。
plotlssvm ({P, T, type, gam, sig2, ′RBF _ kernel ′,′preprocess′}, {alpha, b})plotlssvm函数是 LS-SVM 工具箱特有的绘图函数, 和 plot函数原理相近。
simlssvm函数也是 LS-SVM 工具箱的重要函数, 其中的参数如上述所示, 原理类似于神经网络工具箱中的 sim 函数。
通过调用 trainlssvm函数和 si m lssvm 函数我们可以看到最小二乘支持向量机和神经网络的结构有很多共同之处。
与神经网络进行对比:
神经网络建立的模型要比 LS-SVM 好, 但是在预估上, LS-SVM 要优于神经网络,具有较好的泛化能力, 而且训练速度要比神经网络快。

⛄二、部分源代码

%=====================================================================
%初始化
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 %计算时间

⛄三、运行结果


⛄四、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.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【LSSVM回归预测】基于matlab飞蛾扑火算法优化LSSVM回归预测【含Matlab源码 110期】相关推荐

  1. 【LSSVM回归预测】基于matlab飞蛾扑火算法优化LSSVM回归预测【含Matlab源码 142期】

    ⛄一.简介 LSSVM的特性   1) 同样是对原始对偶问题进行求解,但是通过求解一个线性方程组(优化目标中的线性约束导致的)来代替SVM中的QP问题(简化求解过程),对于高维输入空间中的分类以及回归 ...

  2. 【LSSVM回归预测】基于matlab麻雀算法优化LSSVM回归预测【含Matlab源码 1128期】

    ⛄一.麻雀算法优化LSSVM简介 1 标准麻雀算法 算法运算过程由探索者.追随者与预警者3部分构成,其中探索者与追随者的总数量与比例不变,根据适应度数值的改变,两者可以相互转化.通过觅食和反捕食行为来 ...

  3. 【LSSVM分类】基于matlab灰狼算法优化LSSVM分类(多输入多分类)【含Matlab源码 1558期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[LSSVM分类]基于matlab灰狼算法优化LSSVM分类(多输入多分类)[含Matlab源码 1558期] 获取代码方式2: 付费专栏 ...

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

    ⛄一.麻雀算法优化LSSVM简介 1 标准麻雀算法 算法运算过程由探索者.追随者与预警者3部分构成,其中探索者与追随者的总数量与比例不变,根据适应度数值的改变,两者可以相互转化.通过觅食和反捕食行为来 ...

  5. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【BA TSP】基于matlab蜜蜂算法求解旅行商问题【含matlab源码 1248期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蜜蜂算法求解旅行商问题[含matlab源码 1248期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  7. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  8. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  9. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

最新文章

  1. android 找不到符号 符号 RequiresApi
  2. matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
  3. epoll使用详解(精髓)
  4. 第一行代码学习笔记第二章——探究活动
  5. asa防火墙升级固件_奇淫巧技 | 在路由器中添加策略,阻止电视系统升级
  6. python练习,随机数字 函数,循环,if,格式化输出
  7. Linux 下用来查询安装包信息的RPM选项
  8. Linux平台上SQLite数据库教程(二)——C语言API介绍
  9. 队列、函数-多线程 线程队列的实现-by小雨
  10. 数据库笔记08:实现索引
  11. iOS_SN_详解沙河(转载)
  12. 百面机器学习—3.逻辑回归与决策树要点总结
  13. 基于Matlab的标记分水岭分割算法
  14. jquery chosen动态设置值
  15. 2022智慧工地劳务实名制系统——工地人员高效管理黑科技
  16. Python多继承及MRO顺序
  17. python opencv 读取显示图片
  18. CSDN开发云-优雅使用云容器服务
  19. Hystrix - 阻断器
  20. 【kimol君的无聊小发明】—用python写截屏小工具

热门文章

  1. 使用addRoutes动态添加路由
  2. 黑洞6174怎样通过 matlab编写程序来实现?,1019_黑洞6174
  3. go和python哪个好_Go和Python比较的话,哪个比较好?
  4. 矩阵的秩:行秩等于列秩
  5. 转贴:【欧美经典音乐】When you told me you loved me
  6. 零基础C语言入门013——逻辑运算符,与、或、非
  7. c语言的按位或,与,非运算符
  8. 蜘蛛池对于SEO的作用
  9. 小程序wifi代理服务器,官方小程序:wifi一键连,亲测实用
  10. 移动电影院牵手华为,落户五大洲