• 单目标应用:萤火虫算法(Firefly Algorithm,FA)优化RBF神经网络实现数据预测(RBF隐藏层神经元个数可以自行设定)


    一、萤火虫算法FA

    萤火虫算法(Firefly Algorithm,FA)是Yang等人于2009年提出的一种仿生优化算法。
    在这里插入图片描述

    参考文献:田梦楚, 薄煜明, 陈志敏, et al. 萤火虫算法智能优化粒子滤波[J]. 自动化学报, 2016, 42(001):89-97.

    二、RBF神经网络

    1988年,Broomhead和Lowc根据生物神经元具有局部响应这一特点,将RBF引入神经网络设计中,产生了RBF(Radical Basis Function)。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。

    RBF的基本思想是:用RBF作为隐单元的“基”构成隐藏层空间,隐含层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分的问题在高维空间内线性可分。

    RBF神经网络结构简单、训练简洁而且学习收敛速度快,能够逼近任意非线性函数,因此已被广泛应用于时间序列分析、模式识别、非线性控制和图形处理等领域。

    RBF神经网络学习算法需要优化的参数有3个:基函数的中心方差以及隐含层到输出层的权值
    基于高斯核的RBF神经网络拓扑结构:
    第一层输入层:由信号源节点构成,仅起到数据信息的传递作用,对输入信息不做任何变换

    第二层隐含层:节点数视需要而定。隐含层神经元核函数(作用函数)是高斯函数,对输入信息进行空间映射的变换。

    第三层输出层,对输入模式做出响应。输出层神经元的作用函数为线性函数,对隐含层神经元输出的信息进行线性加权后输出,作为整个神经网络的输出结果。

    在这里插入图片描述

    三、萤火虫算法FA优化RBF神经网络

    萤火虫算法FA中每个个体由基函数的中心方差以及隐含层到输出层的权值构成,目标函数为样本真实值与预测值的均方误差(MSE)。训练数据集为5个输入,2个输出,共100个样例。构建结构为5-8-2的RBF神经网络,其中隐藏层神经元数目可以修改。
    部分样例如下:(前5列为输入,后2列为输出)

    0.231275469013250	0.819206722779840	0.845110449594525	0.184086789965809	0.785385668685064	0.273016775596421	-0.525289339305860
    0.361541209457843	0.841205431876524	0.980374803793902	0.0859900940578461	0.688836587017380	0.182614021784274	-0.359086617897261
    0.922688287491720	0.699812576279511	0.899786340304967	0.432450528880324	0.569301647632306	-0.373191545730696	0.692460134226641
    0.299227234437514	0.0816091519448512	0.740899022326946	0.650897340325028	0.209324055396846	0.916657628162626	-0.732727263933928
    0.0248021181709812	0.374796074923082	0.570315333727928	0.253772503915307	0.338256777364241	0.999960807859380	0.0177061120929101
    0.646658961616975	0.0423161385647169	0.106104935388092	0.212179497735250	0.830057126375891	0.964693196398184	-0.508154508099431
    0.808360466940075	0.399056561751923	0.821081939935231	0.663473595114130	0.521205398088936	-0.0715241846059059	0.142682003141748
    0.996036904340983	0.177590010319259	0.498978760642987	0.535374820095270	0.273972088775787	0.612832469899295	-0.968536197268834
    0.254095375608645	0.123643543287013	0.375547648543273	0.342271860252468	0.636914688527762	0.986958752561837	-0.317748121586226
    0.489511345316060	0.858764063567839	0.672506934004802	0.416889604050640	0.875802154076831	-0.171036374456662	0.337032209465389
    0.185278746013332	0.114882179349929	0.0249815105218890	0.540278515239829	0.336848910688767	0.932859186232019	0.672108668047313
    0.909681828009080	0.102232107111248	0.656246980781499	0.654864043388290	0.956710552046541	-0.137703903094583	0.272784117161094
    0.408456363651882	0.938823058283146	0.685665490425611	0.930210090681512	0.623586971563434	-0.430592654242920	0.777259681757975
    0.269585875402607	0.271008875302077	0.507953142985896	0.229313997464057	0.344293696020832	0.998681403071495	-0.102537983893846
    0.643025332315473	0.468703980190812	0.459677634270965	0.401146013642205	0.967774844146207	0.199908807799238	-0.391747100006622
    0.595097567588796	0.309882133224413	0.0578735749039524	0.896085328764512	0.507751211966913	0.699646656853784	-0.999779704342388
    0.832789921454823	0.502400345281531	0.225858041623964	0.657301469048430	0.245308474084980	0.627185531149164	-0.976991854507143
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    部分代码如下:(完整代码可以私聊博主或添加博主微信

    close all
    clear
    clc
    global inputnum hiddennum outputnum TrainNum 
    inputnum=5;%神经网络输入层神经元个数(输入样本维度)
    hiddennum=8;%神经网络隐藏层神经元个数(可以自己修改) 
    outputnum=2;%神经网络输出层神经元个数(输出样本维度)
    TrainNum=100;%训练集数目 
    %% 萤火虫算法FA优化RBF神经网络,目标函数是均方误差MSE
    SearchAgents_no=50; %  种群大小(可以修改)
    Function_name='F1'; 
    Max_iteration=50000; % 最大迭代次数(可以修改)
    [lb,ub,dim,fobj]=fun_info(Function_name);% 在fun_info.m中可以查看上下限及目标函数
    [fMin,bestX,FA_curve]=FA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);  %FA优化RBF神经网络的参数
    save bestX bestX %保留SSA优化RBF神经网络得到的最优参数
    %% 画出FA优化RBF神经网络的均方误差随迭代次数的图
    figure
    semilogy(FA_curve,'Color','g')
    title('Objective space')
    xlabel('Iteration');
    ylabel('MSE');
    grid on
    box on
    legend('FA')
    Predata;%预测
    %%
    display(['The best solution obtained by FA is : ', num2str(bestX)]);
    display(['The best optimal value of the objective funciton found by FA is : ', num2str(fMin)]);%fMin越小说明FA优化RBF神经网络效果越好
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    四、预测结果

    在第一个目标上的真实值与预测值:
    在这里插入图片描述
    在第二个目标上的真实值与预测值:
    在这里插入图片描述

    两个目标的真实值与预测值的误差MAE:
    在这里插入图片描述

  • 相关阅读:
    mybatis-传递参数的方式
    Java踩坑笔记 —— base64转换为图片后图片显示不全
    山东济南建筑模板厂家批发之桉木芯建筑模板
    qt 在下安装闪退 退出的解决方案
    select in ()的时候,MySQL会自动按主键自增排序,要是按IN中给定的顺序来取,如何实现呢?
    EaselJS 源码分析系列--第四篇
    python+ipc+改造过的插线板写一个控制ipc疯狂上下电的脚本
    Netlogo 简化版Scatter 分散
    数据库三大范式
    JAVA SpringMVC老项目集成knife4j
  • 原文地址:https://blog.csdn.net/weixin_46204734/article/details/127791415