当前位置: 首页 > news >正文

麻雀算法极限学习机SSA-ELM回归预测及其MATLAB代码实现

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

极限学习机(Extreme Learning Machine, ELM)是近几年发展起来的一种有效的新型单隐层前馈神经网络学习算法,和传统学习算法不同的是,ELM算法的网络参数随机选取,无需调节,输出权值是通过对平方损失函数最小化得到的最小二乘解,因此该算法具有较快的学习速度和良好的泛化性能,并在多模式分类,非线性预测等领域得到了广泛的应用.但是ELM在学习过程中也不可避免的存在众多缺点,其参数的随机选取导致一系列非最优参数的生成,使得所需隐含层节点数多于传统学习算法,影响其泛化性能,并导致系统的病态;在学习过程中仅仅只利用了输入参数的信息进行计算,而忽略了非常有价值的实际输出值;将其应用于工业生产中所得到的精度不能满足实际的标准等等.针对上述缺点,本文提出了一种对ELM的麻雀搜索算法极限学习机(SSA-ELM)。

1 麻雀搜索算法原理

麻雀搜索算法是一种新型的群智能优化算法,  2020 年由 Xue  [15] 提出,主要是受麻雀的觅食 和反哺食行为启发,具有寻优能力强、收敛速度快的特点。麻雀搜索算法将整个麻雀种群分为三类,即寻找食物的生产者,抢夺食物的加入者和发现危险的警戒者 。生产者和加入者可以相互转化,但各自在 种群中的占比不会发生变化。在模拟实验中,需要使用虚拟麻雀进行食物的 寻找,与其他寻优算法相同,麻雀搜索算法首先需要对麻雀种群与适应度值进行初始化,麻雀种群可 初始化为如下形式,表达式为(3) 

中:n为麻雀的数量;d为要优化的变量的维度即独立参数的数目;xnd为第n只麻雀第d维度的值。由此,总体麻雀适应度值表征形式为 

(4)中:f(x)为个体适应度值。适应度值较好的麻雀(即生产者)在搜索中会优先获得食物并指引群体的觅食方向与范围,与此同时,生产者会具有更大的觅食搜索范围。生产者在觅食过程中,位置不断发生移动,而在遇到捕食者时,移动规则又会发生改变,即 

(5)中:t为当前迭代次数;j∈{12d}xitj为迭代第t次时,第i个麻雀的第j个维度的值;α∈(01],为随机数;iter_max为迭代次数最多的常数;R2∈[01],为报警值;ST∈[01],为安全阈值;Q为服从正态分布的随机数;L1×d阶矩阵(元素全为1)R2ST时,代表该区域安全,无捕食者出没,生产者会出现大范围觅食行为;R2≥ST时,表示一些麻雀发现了捕食者并发出警告,所有麻雀迅速飞入安全区域。而对加入者而言,在觅食过程中,一旦生产者找到了好的食物源,加入者必会知晓,并飞向它的附近抢食,同时,也有加入者会时刻监视生产者,随时准备争抢食物。由此加入者的位置更新规则为

(6)中:xp为生产者占据的最佳位置;xworst为全局最差位置;A1×d阶矩阵,每个元素随机为1或-1A†AT(AAT)1。当i>时,表示适应性较差的第i个加入者抢夺食物失败,为了更好地获得食物避免挨饿只能飞往其他地区进行觅食。总体而言,假设意识到危险的麻雀(即警戒者)10~20%。初始位置则随机产生,规则为

(7)中:λ为步长控制函数,是一个均值为0,方差为1的正态分布随机数;fi为当前麻雀适应值;fg为全局最好适应值;fw为全局最差适应值;k为麻雀移动方向;xbest为全局最优位置;ε为最小常数,避免除数为零。当fifg时,警戒者位于种群边缘,意识到危险后向中央安全区靠近;当fifg时,则是处于种群中央的麻雀意识到了危险,为躲避危险,则向其他麻雀身边靠拢。

2 极限学习机

传统的单隐层神经网络由三部分组成,分别是输入层、隐含层和输出层,输入层神经元节点个数即输入变量的个数,隐含层节点个数则需要人为给定,输出层节点个数也就是输出变量的个数。在2006年,新加坡南洋理工大学的Huang等[16]在传统的单隐层神经网络的基础上提出了一种新的前馈神经网络学习算法,命名为极限学习机(extremelearningmachine,ELM),不同于传统的基于梯度的前馈神经网络算法,该方法随机产生隐含层与输入层之间的连接权值及隐含层神经元的阈值,训练过程中只需要设置隐含神经元的个数便可获得唯一最优解,极限学习机网络结构如图1所示。

3 麻雀算法优化极限学习机

本文采用麻雀搜索算法对其隐含层的初始权值与阈值进行优化,具体构建过程可以概述为:确定ELM的输入与输出样本集;确定对ELM初始权值及阈值的编码方式;随机采样产生第一代种群;计算每个个体的适应值,并排序选优;按照既定规则更新产生下一代种群直至满足终止条件为止,终止条件设置为预测值与期望值的误差矩阵的范数小于某一设定值。

利用麻雀搜索算法对核极限学习机的两项参数:核参数及正则化系数进行优化,得到耦合滑坡预测模型,其实施步骤如下。

步骤1初始化种群。设置麻雀数量为20,随机产生初始核参数及正则化系数,生成种群初始位置。

步骤2确定优化参数的取值范围。根据多次实验,确定核参数为(-100 100),正则化系数为(-100 100)。

步骤3建立SSA-KELM耦合模型,计算麻雀个体适应度,对适应度值进行排序,寻找出当前最好和最差的个体。

适应度函数为式(16)中为真实值;为函数预测值。

步骤4根据式式(7)更新麻雀位置。

步骤5获取新的麻雀位置及个体适应度值,将本轮最优适应度值与之前的最优适应度值做比较,如果本轮更优,则更新全局最优适应度值与相关位数。

步骤6循环结束。当迭代次数大于500,则寻优过程结束。步骤7得到KELM的最佳训练参数,模型建立。​

⛄ 部分代码

function [output] = my_map(type, raw_data, raw_data_max, raw_data_min, max, min)

if type ~= 0

    output = my_pos_map(raw_data, raw_data_max, raw_data_min, max, min);

end

if type ~= 1 

    output = my_rev_map(raw_data, raw_data_max, raw_data_min, max, min);

end

end

function [out] = my_pos_map(raw_data, raw_data_max, raw_data_min, max, min)

    for i = 1:length(raw_data')

        out(i) = (max - min) * (raw_data(i) - raw_data_min) / (raw_data_max - raw_data_min) + min;

    end

end

function [out] = my_rev_map(raw_data, raw_data_max, raw_data_min, max, min)

    for i = 1:length(raw_data')

        out(i) = (raw_data(i) - min) * (raw_data_max - raw_data_min) / (max - min) + raw_data_min;

    end

end

⛄ 运行结果

⛄ 参考文献

[1]马飞燕, 李向新. 基于改进麻雀搜索算法-核极限学习机耦合算法的滑坡位移预测模型[J]. 科学技术与工程, 2022(022-005).

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

相关文章:

  • 云原生DevOps篇:jenkins发送通知到企业微信机器人
  • LeetCode337:打家劫舍III
  • 【飞桨PaddleSpeech语音技术课程】— 语音识别-流式服务-模型部分
  • isomap降维算法--学习笔记
  • 【Linux】yum vim 基础工具的使用
  • QT学习_03_坐标系统和内存回收机制
  • cookies,session,token都是相对安全,并不能完全防窃取
  • 在Ubuntu22.04条件下,如何打开树莓派4B的串口
  • 初识Docker
  • PMP每日一练 | 考试不迷路-10.29(包含敏捷+多选)
  • SSL证书验证原理和https加密
  • Python实现秒杀抢购某宝商品,不再害怕双十一抢不到了
  • 瞪羚优化算法(Gazelle Optimization Algorithm,GOA)
  • CSS3入门
  • 【SQL优化】海量数据大页码MySQL查询该如何优化
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【Amaple教程】5. 插件
  • Centos6.8 使用rpm安装mysql5.7
  • centos安装java运行环境jdk+tomcat
  • FastReport在线报表设计器工作原理
  • Java程序员幽默爆笑锦集
  • learning koa2.x
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • quasar-framework cnodejs社区
  • SpriteKit 技巧之添加背景图片
  • Swift 中的尾递归和蹦床
  • Web标准制定过程
  • 阿里云前端周刊 - 第 26 期
  • 高度不固定时垂直居中
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 记一次删除Git记录中的大文件的过程
  • 如何选择开源的机器学习框架?
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 通过npm或yarn自动生成vue组件
  • 问题之ssh中Host key verification failed的解决
  • 译米田引理
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • (145)光线追踪距离场柔和阴影
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (day6) 319. 灯泡开关
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (zhuan) 一些RL的文献(及笔记)
  • (八十八)VFL语言初步 - 实现布局
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (十六)Flask之蓝图
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)JAVA中的堆栈
  • (转)memcache、redis缓存
  • (转载)Linux 多线程条件变量同步
  • ..回顾17,展望18
  • .NET 5种线程安全集合
  • .Net 代码性能 - (1)
  • .net中生成excel后调整宽度
  • .pop ----remove 删除