基于社会群体优化的BP神经网络(分类应用) - 附代码

news2024/11/29 12:33:33

基于社会群体优化的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/119677682

社会群体算法的参数设置为:

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.coloradmin.cn/o/1096106.html

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

相关文章

【网络安全 --- Burp Suite抓包工具】学网安必不可少的Burp Suite工具的安装及配置

一,下载JDK 由于BP是java语言开发的,运行环境需要安装好Java的JDK,不然程序没法运行,首先下载Java的JDK 下载网址: 国内: https://www.java.com/zh-CN/download/https://www.java.com/zh-CN/download/ 国外…

前端开发新趋势:Web3、区块链与虚拟现实

文章目录 Web3:下一代互联网区块链技术去中心化应用程序(DApps) 区块链:重塑数字世界数字钱包NFT(非同质化代币) 虚拟现实:沉浸式体验WebVR和WebXR三维图形 新挑战与机会性能与复杂性安全性创新…

c++视觉处理----分水岭算法

分水岭算法 分水岭算法是一种图像处理和分割算法,通常用于分离数字图像中的不同对象或区域。该算法的名称来自地理学中的"分水岭"概念,其中高地图上的山脊分割了不同的水流方向,类似地,分水岭算法可以分割图像中的不同…

Ai_drive _103_重新思考图像融合策略和自监督对比学习

近先进的无监督学习方法使用类似连体的框架来比较来自同一图像的两个“视图”以进行学习表示。使这两种观点与众不同的是保证无监督方法可以学习有意义信息核心。但是,如果用于生成两个视图的增强不够强,则此类框架有时会在过度拟合方面变得脆弱&#xf…

VL53L5CX驱动开发(4)----运动指示器

VL53L5CX驱动开发----4.运动指示器 概述视频教学样品申请源码下载生成STM32CUBEMX选择MCU串口配置IIC配置 INT设置配置使能与复位X-CUBE-TOF1串口重定向代码配置检测流程TOF代码配置主程序演示结果 概述 VL53L5CX传感器内置了一个固件功能,可以检测场景中的运动。这…

【算法|动态规划No.21】leetcode494. 目标和

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

Redis的五大基础数据类型

String 字符串类型&#xff0c;通过set关键字和get关键字来设置字符串键值对和获取字符串键值对。 hash 哈希类型&#xff0c;结构和Map<String,Map<String,stirng>>类似。 使用hset来设置哈希&#xff0c;使用hget来获取哈希&#xff0c;hget要精确到第二个key…

【深度学习 | Transformer】释放注意力的力量:探索深度学习中的 变形金刚,一文带你读通各个模块 —— Positional Encoding(一)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Python深度学习实践代码实现

线性模型 课程 代码 import numpy as np import matplotlib.pyplot as plt x_data[1.0,2.0,3.0] y_data[2.0,4.0,6.0] #前馈函数 def forward(x):return x*w #损失函数 def loss(x,y):y_predforward(x)return (y_pred-y)*(y_pred-y) w_list[] mse_list[] for w in np.arange…

2.Javaweb模块基本

1.1web基本 session 和 cookie 有什么区别&#xff1f; 存储位置不同&#xff1a;session 存储在服务器端&#xff1b;cookie 存储在浏览器端。 安全性不同&#xff1a;cookie 安全性一般&#xff0c;在浏览器存储&#xff0c;可以被伪造和修改。 容量和个数限制&#xff1a;…

浅讲make/makefile【linux】

浅讲make/makefile【linux】 一. 什么是make/makefile&#xff1f;二. makefile2.1 依赖关系与依赖方法2.2 浅用make2.2.1 make test2.2.2 clean 2.2 make一次执行多步2.3 部分修饰符号2.3.1 .PHONY(伪目标)2.3.2 2.3.3 $ $^ 一. 什么是make/makefile&#xff1f; make/makefi…

uml知识点学习

https://zhuanlan.zhihu.com/p/659911315https://zhuanlan.zhihu.com/p/659911315软件工程分析设计图库目录 - 知乎一、结构化绘图1. 结构化——数据流图Chilan Yuk&#xff1a;1. 结构化——数据流图2. 结构化——数据字典Chilan Yuk&#xff1a;2. 结构化——数据字典3. 结构…

“理解梯度下降:直觉、数学公式和推导”

一、说明 梯度下降是机器学习中使用的一种流行的优化算法&#xff0c;通过迭代调整函数的参数来最小化函数。基本思想是将函数的参数沿函数梯度最陡峭下降的方向移动。 二、关于梯度的叙述 简单来说&#xff0c;想象一下你在山顶&#xff0c;你想尽快到达山脚下。你可以开始下坡…

流程图规范

文章目录 1.符号概览2.要求2.1 从上至下&#xff0c;从左至右的流向顺序2.2 开始符号只能有一个出口2.3 进程符号不做逻辑校验2.4 相同流程图&#xff0c;符号大小应为一致2.5 引用流程&#xff0c;而不是重复绘制2.6 路径符号应尽量避免相互交叉2.7 同一路径&#xff0c;箭头只…

【Python】Python语言基础(下)

目录 第十一章 控制结构 for语句 if语句 while语句 第十二章 函数 函数介绍 函数的定义 函数的调用 函数的传参 函数的传参方式 位置实参 关键字实参 默认值实参 函数的返回值 函数传递未知数量的实参 函数的模块调用 调用整个模块 调用模块中特定功能 第十…

业财融合潮流下,构建国有企业全面预算管理体系

近年来&#xff0c;在我国快速发展的变革过程中&#xff0c;国有企业改革的持续深入需要积极结合市场环境和自身发展需求&#xff0c;然而其传统的财务管理模式难以适应企业提出的新要求&#xff0c;预算管理与经营销售之间不断出现隔阂。为确保全面预算管理在国有企业内部的良…

部署个人静态网站到阿里云服务器(含域名解析)

使用前提&#xff1a; 您目前已经有一个静态网站&#xff0c;可以在本地通过html进行访问。 1、购买阿里云服务器 该步骤最详细的教程来自官方文档 具体到从注册开始每一个鼠标点击都有图片介绍。 你可以按照他的步骤完成整个部署过程&#xff0c;当然可以自己选择服务器的…

【实用调试技巧】总是找不到Bug?手把手教你在vs2022中调试程序

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:程序调试及报错解决 ⚙️操作环境:Visual Studio 2022 目录 什么是Bug? 1947年9月9日:第一个"Bug"被发现 什么是调试? 调试是什么? 调试的基本步骤 Debug和Relese的区别 1.调试的区别 2.文件大小的…

13 | 如何正确使用 @Entity 里面的回调方法

Java Persistence API 里面规定的回调方法有哪些&#xff1f; JPA 协议里面规定&#xff0c;可以通过一些注解&#xff0c;为其监听回调事件、指定回调方法。下面我整理了一个回调事件注解表&#xff0c;分别列举了 PrePersist、PostPersist、PreRemove、PostRemove、PreUpdat…

线性排序:如何根据年龄给100万用户数据排序?

文章来源于极客时间前google工程师−王争专栏。 桶排序、计数排序、基数排序时间复杂度是O(n)&#xff0c;所以这类排序算法叫作线性排序。 线性的原因&#xff1a;三个算法是非基于比较的排序算法&#xff0c;都不涉及元素之间的比较操作。 三种排序对排序的数据要求苛刻&am…