基于MATLAB的BP神经网络的数据分类

2023-11-14

1.BP神经网络的简介

       BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。在前向传递中,输入信号从输出层经隐含层逐层处理,直至输出层。每一层神经元状态只会影响下一层神经元状态。如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值或阈值,从而使BP神经网络预测输出不断逼近期望输出。BP神经网络的拓扑结构如图所示。

      BP神经网络预测前首先要训练网络,通过训练使网络具有联想记忆能力和预测能力。

2.BP神经网络数据分类的步骤

1.读取数据

2.设置训练数据和预测数据

3.训练样本归一化

4.测试样本归一化

5.网络参数的设置

6.构建BP数据网络

7.BP神经网络数据预测

8.绘制混淆矩阵图

3.BP神经网络数据分类的实际案例

      通过matlab仿真获取48种不同故障类型的配电网故障数据,提取各种各种数据的特征,作为BP神经网络的输入,使用BP神经网络进行故障识别。

matlab代码展示:

clear                   % 清空变量
clc                     % 清空命令行

%%  读取数据
rng(100)                % 为了重现性

load Feature.mat
%确定训练集/测试集的数量
kind=48;%类别
Numofsample=80;%每种类型的仿真的数量
Numoftrain=20;%每种类型的训练集数量
Numoftest=Numofsample-Numoftrain;%每种类型的测试集数量

%将所有类型的训练集合并在一起
traindata=[feature1(1:Numoftrain,:);feature2(1:Numoftrain,:);feature3(1:Numoftrain,:);feature4(1:Numoftrain,:);...
           feature5(1:Numoftrain,:);feature6(1:Numoftrain,:);feature7(1:Numoftrain,:);feature8(1:Numoftrain,:);...
           feature9(1:Numoftrain,:);feature10(1:Numoftrain,:);feature11(1:Numoftrain,:);feature12(1:Numoftrain,:);...
           feature13(1:Numoftrain,:);feature14(1:Numoftrain,:);feature15(1:Numoftrain,:);feature16(1:Numoftrain,:);...
           feature17(1:Numoftrain,:);feature18(1:Numoftrain,:);feature19(1:Numoftrain,:);feature20(1:Numoftrain,:);...
           feature21(1:Numoftrain,:);feature22(1:Numoftrain,:);feature23(1:Numoftrain,:);feature24(1:Numoftrain,:);...
           feature25(1:Numoftrain,:);feature26(1:Numoftrain,:);feature27(1:Numoftrain,:);feature28(1:Numoftrain,:);...
           feature29(1:Numoftrain,:);feature30(1:Numoftrain,:);feature31(1:Numoftrain,:);feature32(1:Numoftrain,:);...
           feature33(1:Numoftrain,:);feature34(1:Numoftrain,:);feature35(1:Numoftrain,:);feature36(1:Numoftrain,:);...
           feature37(1:Numoftrain,:);feature38(1:Numoftrain,:);feature39(1:Numoftrain,:);feature40(1:Numoftrain,:);...
           feature41(1:Numoftrain,:);feature42(1:Numoftrain,:);feature43(1:Numoftrain,:);feature44(1:Numoftrain,:);...
           feature45(1:Numoftrain,:);feature46(1:Numoftrain,:);feature47(1:Numoftrain,:);feature48(1:Numoftrain,:)];

trainlabel(1,0*Numoftrain+1:1*Numoftrain)=1;
trainlabel(1,1*Numoftrain+1:2*Numoftrain)=2;
trainlabel(1,2*Numoftrain+1:3*Numoftrain)=3;
trainlabel(1,3*Numoftrain+1:4*Numoftrain)=4;
trainlabel(1,4*Numoftrain+1:5*Numoftrain)=5;
trainlabel(1,5*Numoftrain+1:6*Numoftrain)=6;
trainlabel(1,6*Numoftrain+1:7*Numoftrain)=7;
trainlabel(1,7*Numoftrain+1:8*Numoftrain)=8;
trainlabel(1,8*Numoftrain+1:9*Numoftrain)=9;
trainlabel(1,9*Numoftrain+1:10*Numoftrain)=10;
trainlabel(1,10*Numoftrain+1:11*Numoftrain)=11;
trainlabel(1,11*Numoftrain+1:12*Numoftrain)=12;
trainlabel(1,12*Numoftrain+1:13*Numoftrain)=13;
trainlabel(1,13*Numoftrain+1:14*Numoftrain)=14;
trainlabel(1,14*Numoftrain+1:15*Numoftrain)=15;
trainlabel(1,15*Numoftrain+1:16*Numoftrain)=16;
trainlabel(1,16*Numoftrain+1:17*Numoftrain)=17;
trainlabel(1,17*Numoftrain+1:18*Numoftrain)=18;
trainlabel(1,18*Numoftrain+1:19*Numoftrain)=19;
trainlabel(1,19*Numoftrain+1:20*Numoftrain)=20;
trainlabel(1,20*Numoftrain+1:21*Numoftrain)=21;
trainlabel(1,21*Numoftrain+1:22*Numoftrain)=22;
trainlabel(1,22*Numoftrain+1:23*Numoftrain)=23;
trainlabel(1,23*Numoftrain+1:24*Numoftrain)=24;
trainlabel(1,24*Numoftrain+1:25*Numoftrain)=25;
trainlabel(1,25*Numoftrain+1:26*Numoftrain)=26;
trainlabel(1,26*Numoftrain+1:27*Numoftrain)=27;
trainlabel(1,27*Numoftrain+1:28*Numoftrain)=28;
trainlabel(1,28*Numoftrain+1:29*Numoftrain)=29;
trainlabel(1,29*Numoftrain+1:30*Numoftrain)=30;
trainlabel(1,30*Numoftrain+1:31*Numoftrain)=31;
trainlabel(1,31*Numoftrain+1:32*Numoftrain)=32;
trainlabel(1,32*Numoftrain+1:33*Numoftrain)=33;
trainlabel(1,33*Numoftrain+1:34*Numoftrain)=34;
trainlabel(1,34*Numoftrain+1:35*Numoftrain)=35;
trainlabel(1,35*Numoftrain+1:36*Numoftrain)=36;
trainlabel(1,36*Numoftrain+1:37*Numoftrain)=37;
trainlabel(1,37*Numoftrain+1:38*Numoftrain)=38;
trainlabel(1,38*Numoftrain+1:39*Numoftrain)=39;
trainlabel(1,39*Numoftrain+1:40*Numoftrain)=40;
trainlabel(1,40*Numoftrain+1:41*Numoftrain)=41;
trainlabel(1,41*Numoftrain+1:42*Numoftrain)=42;
trainlabel(1,42*Numoftrain+1:43*Numoftrain)=43;
trainlabel(1,43*Numoftrain+1:44*Numoftrain)=44;
trainlabel(1,44*Numoftrain+1:45*Numoftrain)=45;
trainlabel(1,45*Numoftrain+1:46*Numoftrain)=46;
trainlabel(1,46*Numoftrain+1:47*Numoftrain)=47;
trainlabel(1,47*Numoftrain+1:48*Numoftrain)=48;

%将所有类型的测试集合并在一起
testdata=[feature1(Numoftrain+1:Numofsample,:);feature2(Numoftrain+1:Numofsample,:);feature3(Numoftrain+1:Numofsample,:);feature4(Numoftrain+1:Numofsample,:);...
          feature5(Numoftrain+1:Numofsample,:);feature6(Numoftrain+1:Numofsample,:);feature7(Numoftrain+1:Numofsample,:);feature8(Numoftrain+1:Numofsample,:);...
          feature9(Numoftrain+1:Numofsample,:);feature10(Numoftrain+1:Numofsample,:);feature11(Numoftrain+1:Numofsample,:);feature12(Numoftrain+1:Numofsample,:);...
          feature13(Numoftrain+1:Numofsample,:);feature14(Numoftrain+1:Numofsample,:);feature15(Numoftrain+1:Numofsample,:);feature16(Numoftrain+1:Numofsample,:);...
          feature17(Numoftrain+1:Numofsample,:);feature18(Numoftrain+1:Numofsample,:);feature19(Numoftrain+1:Numofsample,:);feature20(Numoftrain+1:Numofsample,:);...
          feature21(Numoftrain+1:Numofsample,:);feature22(Numoftrain+1:Numofsample,:);feature23(Numoftrain+1:Numofsample,:);feature24(Numoftrain+1:Numofsample,:);...
          feature25(Numoftrain+1:Numofsample,:);feature26(Numoftrain+1:Numofsample,:);feature27(Numoftrain+1:Numofsample,:);feature28(Numoftrain+1:Numofsample,:);...
          feature29(Numoftrain+1:Numofsample,:);feature30(Numoftrain+1:Numofsample,:);feature31(Numoftrain+1:Numofsample,:);feature32(Numoftrain+1:Numofsample,:);...
          feature33(Numoftrain+1:Numofsample,:);feature34(Numoftrain+1:Numofsample,:);feature35(Numoftrain+1:Numofsample,:);feature36(Numoftrain+1:Numofsample,:);...
          feature37(Numoftrain+1:Numofsample,:);feature38(Numoftrain+1:Numofsample,:);feature39(Numoftrain+1:Numofsample,:);feature40(Numoftrain+1:Numofsample,:);...
          feature41(Numoftrain+1:Numofsample,:);feature42(Numoftrain+1:Numofsample,:);feature43(Numoftrain+1:Numofsample,:);feature44(Numoftrain+1:Numofsample,:);...
          feature45(Numoftrain+1:Numofsample,:);feature46(Numoftrain+1:Numofsample,:);feature47(Numoftrain+1:Numofsample,:);feature48(Numoftrain+1:Numofsample,:)];

testlabel(1,0*Numoftest+1:1*Numoftest)=1;
testlabel(1,1*Numoftest+1:2*Numoftest)=2;
testlabel(1,2*Numoftest+1:3*Numoftest)=3;
testlabel(1,3*Numoftest+1:4*Numoftest)=4;
testlabel(1,4*Numoftest+1:5*Numoftest)=5;
testlabel(1,5*Numoftest+1:6*Numoftest)=6;
testlabel(1,6*Numoftest+1:7*Numoftest)=7;
testlabel(1,7*Numoftest+1:8*Numoftest)=8;
testlabel(1,8*Numoftest+1:9*Numoftest)=9;
testlabel(1,9*Numoftest+1:10*Numoftest)=10;
testlabel(1,10*Numoftest+1:11*Numoftest)=11;
testlabel(1,11*Numoftest+1:12*Numoftest)=12;
testlabel(1,12*Numoftest+1:13*Numoftest)=13;
testlabel(1,13*Numoftest+1:14*Numoftest)=14;
testlabel(1,14*Numoftest+1:15*Numoftest)=15;
testlabel(1,15*Numoftest+1:16*Numoftest)=16;
testlabel(1,16*Numoftest+1:17*Numoftest)=17;
testlabel(1,17*Numoftest+1:18*Numoftest)=18;
testlabel(1,18*Numoftest+1:19*Numoftest)=19;
testlabel(1,19*Numoftest+1:20*Numoftest)=20;
testlabel(1,20*Numoftest+1:21*Numoftest)=21;
testlabel(1,21*Numoftest+1:22*Numoftest)=22;
testlabel(1,22*Numoftest+1:23*Numoftest)=23;
testlabel(1,23*Numoftest+1:24*Numoftest)=24;
testlabel(1,24*Numoftest+1:25*Numoftest)=25;
testlabel(1,25*Numoftest+1:26*Numoftest)=26;
testlabel(1,26*Numoftest+1:27*Numoftest)=27;
testlabel(1,27*Numoftest+1:28*Numoftest)=28;
testlabel(1,28*Numoftest+1:29*Numoftest)=29;
testlabel(1,29*Numoftest+1:30*Numoftest)=30;
testlabel(1,30*Numoftest+1:31*Numoftest)=31;
testlabel(1,31*Numoftest+1:32*Numoftest)=32;
testlabel(1,32*Numoftest+1:33*Numoftest)=33;
testlabel(1,33*Numoftest+1:34*Numoftest)=34;
testlabel(1,34*Numoftest+1:35*Numoftest)=35;
testlabel(1,35*Numoftest+1:36*Numoftest)=36;
testlabel(1,36*Numoftest+1:37*Numoftest)=37;
testlabel(1,37*Numoftest+1:38*Numoftest)=38;
testlabel(1,38*Numoftest+1:39*Numoftest)=39;
testlabel(1,39*Numoftest+1:40*Numoftest)=40;
testlabel(1,40*Numoftest+1:41*Numoftest)=41;
testlabel(1,41*Numoftest+1:42*Numoftest)=42;
testlabel(1,42*Numoftest+1:43*Numoftest)=43;
testlabel(1,43*Numoftest+1:44*Numoftest)=44;
testlabel(1,44*Numoftest+1:45*Numoftest)=45;
testlabel(1,45*Numoftest+1:46*Numoftest)=46;
testlabel(1,46*Numoftest+1:47*Numoftest)=47;
testlabel(1,47*Numoftest+1:48*Numoftest)=48;

P_train=traindata;
T_train=trainlabel';

P_test=testdata;
T_test=testlabel';

%%  数据转置
P_train = P_train'; P_test = P_test';
T_train = T_train'; T_test = T_test';

%%  得到训练集和测试样本个数
M = size(P_train, 2);
N = size(P_test , 2);

%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input );
t_train = ind2vec(T_train);
t_test  = ind2vec(T_test );


%% %%%%%%BP神经网络
%%  节点个数
hiddennum = 18;                 % 隐藏层节点数

%% 未优化模型构建
%  网络参数配置
net2=newff(minmax(p_train),[hiddennum kind],{'tansig','purelin'},'trainlm'); % 初始化网络
net2.trainParam.epochs     = 100;      % 训练次数
net2.trainParam.goal       = 1e-7;      % 目标误差
net2.trainParam.lr         = 0.001;      % 学习率
%  网络训练
net2 = train(net2, p_train, t_train);

%%  仿真预测
t_sim1 = sim(net2, p_train);
t_sim2 = sim(net2, p_test );

%%  数据反归一化
T_sim1 = vec2ind(t_sim1);
T_sim2 = vec2ind(t_sim2);

%%  性能评价
error1 = sum((T_sim1 == T_train)) / M * 100 ;
error2 = sum((T_sim2 == T_test )) / N * 100 ;

%%  绘图
figure
plot(1: M, T_train,'-*','Color','#167C80','LineWidth', 1)
hold on
plot(1: M, T_sim1, '-o', 'Color','#bf5f81','LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'BP训练集预测结果对比'; ['准确率=' num2str(error1) '%']};
title(string)
grid

figure
plot(1: N, T_test, '-*','Color','#167C80','LineWidth', 1)
hold on
plot(1: N, T_sim2, '-o', 'Color','#bf5f81','LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'BP测试集预测结果对比'; ['准确率=' num2str(error2) '%']};
title(string)
grid

%%  混淆矩阵
figure
cm1 = confusionchart(T_train, T_sim1);
cm1.Title = 'BP Confusion Matrix for Train Data';
cm1.ColumnSummary = 'column-normalized';
cm1.RowSummary = 'row-normalized';

figure
cm2 = confusionchart(T_test, T_sim2);
cm2.Title = 'BP Confusion Matrix for Test Data';
cm2.ColumnSummary = 'column-normalized';
cm2.RowSummary = 'row-normalized';

4.代码运行结果

        运行代码会获得一个上图所示的界面,等待一段时间后获得测试集和训练集的数据分类结果。如下图所示:

1.测试集数据分类结果

 2.训练集数据分类的结果

 5.结语

  1. 经过努力编写,终于将BP网络的搭建思路和完整代码表述清楚,供大家学习。
  2. 伙伴们只需将自己的数据代入,即可得到相应的结果,如有问题,欢迎留言交流。
  3. 若有不恰当的地方,恳请指正。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MATLAB的BP神经网络的数据分类 的相关文章

随机推荐

  • 黑盒测试用例设计方法--场景法

    8 场景法 8 1定义 场景法是通过运用场景来对系统的功能点或业务流程的描述 从而提高测试效果的一种方法 场景法一般包含基本流和备用流 从一个流程开始 通过描述经过的路径来确定的过程 经过遍历所有的基本流和备用流来完成整个场景 场景主要包括
  • 使用Xshell连接Ubuntu

    1 6 1 使用Xshell连接Ubuntu 使用命令ifconfig查看虚拟机IP地址 如图1 xx所示 图1 xx 使用如下命令安装ssh 以让Xshell软件远程连接到Ubuntu系统中 sudo apt get install op
  • CSS行高(line-height)使文本垂直居中详解

    一 场景重现 在我们的静态页面设计中 在我们的块级元素中写入文字时 div class center 我想在中间 div center height 50px background color 008c8c 会发现我们最后在网页显示的效果为
  • PCB电路板上各种标志的含义

    目录 一 PCB电路板上各种标志的含义 1 防静电标志 2 WEEE标志 3 国内认证 4 全球认证 5 北美认证 6 欧盟认证 7 韩国认证 8 日本认证 9 澳大利亚认证 一 PCB电路板上各种标志的含义 链接 PCB电路板上各种标志的
  • vue3中使用百度地图BMAP

    在Vue3中使用百度地图 可以按照以下步骤进行 1 在项目中引入百度地图的API文件 可以在public index html文件中添加以下代码 其中 密钥可以在百度地图开放平台申请 2 在需要使用地图的组件中引入BMap对象和BMapGL
  • Prompt GPT推荐社区

    大家好 我是荷逸 这次给大家带来的是我日常学习Prompt社区推荐 Snack Prompt 访问地址 http snackprompt com Snack Prompt是一个采用的Prompts诱导填空式的社区 它提供了一种简单的prom
  • vpdn-l2tp(cisco)

    ra config interface serial 1 0 config if ip add 173 16 1 1 255 255 255 252 config if no sh config if exit config vpdn en
  • java中常用的队列

    一 java中的队列 Queue 基本上 一个队列就是一个先入先出 FIFO 的数据结构 Queue接口与List Set同一级别 都是继承了Collection接口 LinkedList实现了Deque接口 二 非阻塞队列 非阻塞队列不能
  • 一个价值一千五的外包项目!抓取大众点评的店铺信息!

    前言 今天在群里有人派外包的其中一个是抓取大众点评的店铺信息 价格一千五 三天内完成 很多刚学编程的小伙伴 应该觉得这个一千五也太容易拿了 相对于大众点评这个网站 其实不是像爬小说 爬表情包那样容易的 大众点评这个网站它是有反爬的 其实也就
  • Vue——v-slot父组件调用子组件内的值

    首先声明子组件 设置3个slot插槽 分别为header main和默认插槽
  • QT从入门到入土(九)——TCP/IP网络通信(以及文件传输)

    引言 TCP IP通信 即SOCKET通信 是通过网线将服务器Server端和客户机Client端进行连接 在遵循ISO OSI模型的四层层级构架的基础上通过TCP IP协议建立的通讯 控制器可以设置为服务器端或客户端 关于TCP IP协议
  • Ubuntu 之安装 Jenkins

    前提环境 Jenkins 依赖 Java 环境 Jenkins 下载 https mirrors tuna tsinghua edu cn jenkins war 2 300 地址 http mirrors jenkins ci org 首
  • 10个高效的摸鱼神器,你错过几个?

    老话说的好 Chrome 没插件 香味少一半 作为使用过上百个插件的Chrome半资深用户 这儿极力推荐10个插件 除了摸鱼 还能让你的工作学习效率翻高好几倍 1 Global Speed 视频播放提高至16倍速 以往我们看的视频网站 也就
  • Redis - String内存开销问题以及基本/扩展数据类型的使用

    Redis String内存开销问题以及基本 扩展数据类型的使用 一 String 类型内存开销问题 1 1 SDS 结构 1 2 RedisObject 结构 1 3 String 类型的内存布局优化 1 4 压缩列表的优势 二 Redi
  • [安全攻防进阶篇] 二.如何学好逆向分析、逆向路线推荐及吕布传游戏逆向案例

    从2019年7月开始 我来到了一个陌生的专业 网络空间安全 初入安全领域 是非常痛苦和难受的 要学的东西太多 涉及面太广 但好在自己通过分享100篇 网络安全自学 系列文章 艰难前行着 感恩这一年相识 相知 相趣的安全大佬和朋友们 如果写得
  • PyCharm远程连接Spark

    PyCharm远程连接Spark 使用PyCharm连接远程服务器 总结一下完善的步骤 连接前一定要保证集群已经可以运行pyspark程序 1 添加SFTP连接 找到菜单Tool gt Deployment gt Configuration
  • Java学习资料

    Javadoop https javadoop com 公众号 Java学习录 https mp weixin qq com s xqDPttr53rxLBi8t8kIQDg bugstack 虫洞栈 https bugstack cn
  • IO学习系列之使用read和write复制文件内容

    read函数 功能 从文件fd中读取count个字节 存放进指针buf 具体内容 include
  • forest--声明式HTTP客户端框架-spring-b oot项目整合

    Forest 是一个开源的 Java HTTP 客户端框架 它能够将 HTTP 的所有请求信息 包括 URL Header 以及 Body 等信息 绑定到您自定义的 Interface 方法上 能够通过调用本地接口方法的方式发送 HTTP
  • 基于MATLAB的BP神经网络的数据分类

    1 BP神经网络的简介 BP神经网络是一种多层前馈神经网络 该网络的主要特点是信号前向传递 误差反向传播 在前向传递中 输入信号从输出层经隐含层逐层处理 直至输出层 每一层神经元状态只会影响下一层神经元状态 如果输出层得不到期望输出 则转入