基于人工蜂鸟优化的BP神经网络(分类应用) - 附代码

基于人工蜂鸟优化的BP神经网络(分类应用) - 附代码

文章目录

  • 基于人工蜂鸟优化的BP神经网络(分类应用) - 附代码
    • 1.鸢尾花iris数据介绍
    • 2.数据集整理
    • 3.人工蜂鸟优化BP神经网络
      • 3.1 BP神经网络参数设置
      • 3.2 人工蜂鸟算法应用
    • 4.测试结果:
    • 5.Matlab代码

摘要:本文主要介绍如何用人工蜂鸟算法优化BP神经网络,利用鸢尾花数据,做一个简单的讲解。

1.鸢尾花iris数据介绍

本案例利用matlab公用的iris鸢尾花数据,作为测试数据,iris数据是特征为4维,类别为3个类别。数据格式如下:

特征1特征2特征3类别
单组iris数据5.32.11.21

3种类别用1,2,3表示。

2.数据集整理

iris数据总共包含150组数据,将其分为训练集105组,测试集45组。如下表所示:

训练集(组)测试集(组)总数据(组)
10545150

类别数据处理:原始数据类别用1,2,3表示为了方便神经网络训练,类别1,2,3分别用1,0,0;0,1,0;0,0,1表示。

当进行数据训练对所有输入特征数据均进行归一化处理。

3.人工蜂鸟优化BP神经网络

3.1 BP神经网络参数设置

通常而言,利用智能算法一般优化BP神经网络的初始权值和阈值来改善BP神经网络的性能。本案例基于iris数据,由于iris数据维度不高,采用简单的BP神经网络。神经网络参数如下:

神经网络结构

图1.神经网络结构

神经网络参数如下:

%创建神经网络
inputnum = 4;     %inputnum  输入层节点数 4维特征
hiddennum = 10;     %hiddennum  隐含层节点数
outputnum = 3;     %outputnum  隐含层节点数
net = newff( minmax(input) , [hiddennum outputnum] , { 'logsig' 'purelin' } , 'traingdx' ) ;
%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 200 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;

3.2 人工蜂鸟算法应用

人工蜂鸟算法原理请参考:https://blog.csdn.net/u011835903/article/details/128386612

人工蜂鸟算法的参数设置为:

popsize = 10;%种群数量Max_iteration = 15;%最大迭代次数
lb = -5;%权值阈值下边界
ub = 5;%权值阈值上边界
%  inputnum * hiddennum + hiddennum*outputnum 为阈值的个数
%  hiddennum + outputnum 为权值的个数
dim =  inputnum * hiddennum + hiddennum*outputnum + hiddennum + outputnum ;%  inputnum * hiddennum + hiddennum*outputnum维度

这里需要注意的是,神经网络的阈值数量计算方式如下:

本网络有2层:

第一层的阈值数量为:4*10 = 40; 即inputnum * hiddennum;

第一层的权值数量为:10;即hiddennum;

第二层的阈值数量为:3*10 = 30;即hiddenum * outputnum;

第二层权值数量为:3;即outputnum;

于是可知我们优化的维度为:inputnum * hiddennum + hiddennum*outputnum + hiddennum + outputnum = 83;

适应度函数值设定:

本文设置适应度函数如下:
f i t n e s s = a r g m i n ( T r a i n D a t a E r r o r R a t e + T e s t D a t a E r r o r R a t e ) fitness = argmin(TrainDataErrorRate + TestDataErrorRate) fitness=argmin(TrainDataErrorRate+TestDataErrorRate)
其中TrainDataErrorRate,TestDataErrorRate分别为训练集和测试集的错误分类率。适应度函数表明我们最终想得到的网络是在测试集和训练集上均可以得到较好结果的网络。

4.测试结果:

从人工蜂鸟算法的收敛曲线可以看到,整体误差是不断下降的,说明人工蜂鸟算法起到了优化的作用:

在这里插入图片描述
在这里插入图片描述

5.Matlab代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进阶课2——语音分类

语音分类主要是对语音从不同的维度进行识别和分类,这些维度可以包括语种、性别、年龄段、情绪、说话人身份等,具体如下: 语种分类:根据发音人的母语或者惯用语言,将语音分为不同的语种,例如中文、英文、法…

中文编程工具开发语言编程案例:会员VIP管理系统软件实例

中文编程工具开发语言编程案例:会员VIP管理系统软件实例 中文编程工具开发语言编程案例:会员VIP管理系统软件实例。 软件功能: 1、系统设置:参数设定,账号及权限设置,系统初始化,卡类型设置&a…

学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例

要想通过SpringBoot写一个简单的处理请求的服务器(方法),需要有以下步骤 建立连接请求响应 来复习的话直接在文章末尾看源码就行 1、创建SpringBoot项目 https://blog.csdn.net/dream_ready/article/details/133948253 2、编写Controller建…

【docker】容器无法使用vi等命令,无法联网,无法换源如何解决?

解决方案: 在宿主机某个位置上创建文件: sources.list 然后修改文件,写入清华源 # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricte…

Kotlin中抽象类与接口

Kotlin 中的抽象类和接口是面向对象编程中的重要概念,它们提供了一种用于定义和组织代码的方式。在下面的代码示例中,我们将介绍 Kotlin 中的抽象类和接口,并给出相应的示例。 抽象类 抽象类是一种不能被实例化的类,它仅用作其他…

Android 画板小工具

工作之余,自己想着利用空闲时间做一些小工具出来,今天分享的是一个简单的画板工具,支持轨迹绘制、更换笔迹颜色等功能,并且可以把成品保存到系统相册。支持Android 13 先看一下效果,吐槽一下csdn的视频上传&#xff0…

音频抓取代码示例

以下是一个使用DefaultsKit库的简单爬虫程序,用于爬取音频。代码中使用了https://www.duoip.cn/get_proxy的API获取代理服务器。 import Foundation import DefaultsKit ​ let url "https://www.douban.com/music" // 目标网站URL let proxyUrl "…

npm ERR! node-sass@6.0.1 postinstall: `node scripts/build.js`

1.遇到的问题 vue npm install提示以下错误 2.首次尝试方法 尝试用下面的方式重新安装弄得-saas,结果不起作用 。 npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install node-sass 这时考虑降级node版本,node.js从…

从手动操作到自动化管理,如何实现企业身份业务全面自动化?

在数字化时代,身份管理已经成为了企业和组织不可或缺的一部分,企业对于管理员工、客户和合作伙伴的身份信息和访问权限的需求变得愈发复杂。身份管理不仅仅是一项必要的任务,更是确保业务流畅运营和数据安全的关键因素。然而,传统…

系统架构之微服务架构

微服务架构 一.传统的单体架构与微服务架构的区别1.1 单体架构1.1.1 优点1.1.2 缺点 1.2 微服务架构1.2.1 优点1.2.2 面临的问题与挑战 二. 微服务架构模式方案2.1 聚合器微服务2.2 链式微服务2.3 数据共享微服务2.4 异步消息传递微服务 三. SOA与微服务的区别 微服务&#xff…

Vue 中setup的特性

特性四&#xff1a;父传子组件传参【defineProps】&#xff1a; 父组件&#xff08;传递数据&#xff09;&#xff1a;利用自定义属性传递数据。 <template><h3>我是父组件</h3><hr /><Child :name"info.name" :age"info.age"…

vue图表引用使用

如果你选择Vue作为你的前端框架&#xff0c;并且需要使用图表插件&#xff0c;那么可以考虑以下几种方式&#xff1a; 使用Vue插件&#xff1a;Vue有许多专门为图表设计的插件&#xff0c;如Vue-chartjs、Vue-echarts等。这些插件提供了一些已经封装好的组件并支持常见的图表库…

前端渲染后端返回的HTML格式的数据

在日常开发中&#xff0c;经常有需要前端渲染后端返回页面的需求&#xff0c;对于不同数据结构&#xff0c;前端的渲染方式也不尽相同&#xff0c;本文旨在对各种情况进行总结。 后端返回纯html文件格式 数据包含html标签等元素&#xff0c;数据类型如下图&#xff1a; 前端通…

“编辑微信小程序与后台数据交互与微信小程序wxs的使用“

引言 在现代移动应用开发中&#xff0c;微信小程序已经成为了一个非常流行和广泛使用的平台。为了使小程序能够展示丰富的内容和实现复杂的功能&#xff0c;与后台数据的交互是至关重要的。同时&#xff0c;微信小程序还提供了一种特殊的脚本语言——wxs&#xff0c;用于增强小…

图论03-【无权无向】-图的深度优先遍历-路径问题/检测环/二分图

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 路径问题的优化-提前结束递归4.1 思路4.2 主要代码 5. 检测环5.1 思路5.2 主要代码 6. 二分图6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 递归判断相邻两点的颜色是否一致…

【手写数据库toadb】语言解析器,编程语言是这样被解析理解,解析器利器flex和bison,解析树与逆波兰式

flex与bsion使用介绍 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方…

安装插件失败,getaddrinfo ENOENT raw.githubusercontent.com 报错

报错如图 解决方法&#xff1a; 查看raw.githubusercontent.com的真实IP地址 点开网址 https://www.ipaddress.com/ &#xff0c;输入raw.githubusercontent.com&#xff0c;点击查询&#xff1a; 复制以下的ip 修改hosts文件 找到这个文件夹&#xff1a; C:\Windows\System32\…

MIPS指令集摘要

目录 MIPS指令R I J三种格式 MIPS五种寻址方式 立即数寻址 寄存器寻址 基址寻址 PC相对寻址 伪直接寻址 WinMIPS64汇编指令 助记 从内存中加载数据 lb lbu lh lhu lw lwu ld l.d lui 存储数据到内存 sb sh sw sd s.d 算术运算 daddi daddui dadd…

Java中静态常量和枚举类的区别

在项目中我们有时候会使用常量、静态常量以及枚举&#xff0c;那么他们有什么区别呢&#xff1f;我们先看几个例子&#xff1a; 若依框架中使用的常量&#xff1a; /** 正常状态 */public static final String NORMAL "0";/** 异常状态 */public static final Stri…