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

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. 若有不恰当的地方,恳请指正。
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值