1 简介

BP神经网络用于光谱分类的具体流程如图 1所示, 其步骤具体如下 :

1)采集样本数据集并对数据做预处理, 通常 BP网络的输入数据都需要做归一化处理。

2)将已知数据样本分为训练集和检验集两部 分, 训练样本集用于对神经网络进行训练, 检验样 本集用于对训练好的网络进行检验。

3)选择神经网络的结构和规模 , 主要是选择 网络的层数和每层的单元数 。

4)选择一定的学习算法用训练样本集对网络 进行训练 , 使网络的实际输出与理想输出满足一定 的误差范围。

5)用检验样本集对网络进行检验 , 把检验样本的输入量输入网络 , 如果网络得到的实际输出与 理想输出在容许的误差范围之内, 说明此神经网络 结构能够用来识别目标, 进行第 6步 ;否则, 回到 步骤 3重复进行 。

6)用训练好的网络进行目标识别和分类 , 输出识别结果 。

bp神经网络spss实例 bp神经网络 spss_分类

2 部分代码

%% 基于PCA+BPNN
clc
clear all
close all
%% 读取数据
% 红砖
data1=load('红砖.txt');
data1=data1';
% 石灰
data2=load('石灰.txt');
data2=data2';
% 水泥
data3=load('水泥.txt');
data3=data3';
% 水泥砖
data4=load('水泥砖.txt');
data4=data4';
% 渣土
data5=load('渣土.txt');
data5=data5';
% 碎石混凝土
data6=load('碎石混凝土.txt');
data6=data6';
%% 波长
wavelength=data1(1,:);
%% 绘制红砖光谱图像
figure
for i=2:size(data1,1)
plot(wavelength,data1(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('红砖光谱特征')
axis tight
box off 

%% 绘制石灰光谱图像
figure
for i=2:size(data2,1)
plot(wavelength,data2(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('石灰光谱特征')
axis tight
box off 
%% 绘制水泥光谱图像
figure
for i=2:size(data3,1)
plot(wavelength,data3(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('水泥光谱特征')
axis tight
box off 
%% 绘制水泥砖光谱图像
figure
for i=2:size(data4,1)
plot(wavelength,data4(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('水泥砖光谱特征')
axis tight
box off 

%% 绘制渣土光谱图像
figure
for i=2:size(data5,1)
plot(wavelength,data5(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('渣土光谱特征')
axis tight
box off 
%% 绘制碎石混凝土光谱图像
figure
for i=2:size(data6,1)
plot(wavelength,data6(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('碎石混凝土光谱特征')
axis tight
box off 
%% 数据
data=[data1(2:end,:);data2(2:end,:);data3(2:end,:);data4(2:end,:);data5(2:end,:);data6(2:end,:)];
%% 标签
Label=[ones(size(data1(2:end,:),1),1);2*ones(size(data2(2:end,:),1),1);3*ones(size(data3(2:end,:),1),1);4*ones(size(data4(2:end,:),1),1);5*ones(size(data5(2:end,:),1),1);6*ones(size(data6(2:end,:),1),1)];
%% PCA主成分分析
[coeff,~,latent]=pca(data);
%% 计算累计贡献率
threshold=0.98;
sum_latent=cumsum(latent/sum(latent));
dimension=find(sum_latent>threshold);
Dim=dimension(1);
%% 降维之后的新数据
Newdata=data*coeff(:,1:Dim);
%% 划分训练集和测试集
nn=randperm(length(Newdata));
ratio=0.7;
tr=floor(ratio*size(Newdata,1));
%% 训练集
train_x=Newdata(nn(1:tr),:)';
train_y=Label(nn(1:tr))';
%% 测试集
test_x=Newdata(nn(tr+1:end),:)';
test_y=Label(nn(tr+1:end))';
%% 数据预处理归一化
% 训练集归一化
[inputn,inputps] = mapminmax(train_x,0,1);
% [outputn,outputps] = mapminmax(train_y,0,1);
% 测试集归一化
input1 = mapminmax('apply',test_x,inputps);
% output1 = mapminmax('apply',test_y,outputps);
%% BP网络设置
hiddennum=20; %隐含层节点
net=newff(inputn,train_y,hiddennum);
% 网络进化参数
net.trainParam.epochs=100;
net.trainParam.lr=0.1;

figure
plot(Tr_sim,'b*','linewidth',1)
hold on
plot(train_y,'ro','linewidth',1)
xlabel('训练集')
ylabel('标签(Label)')
legend('预测标签','实际标签')
methods = {'红砖','石灰','水泥','水泥砖','渣土','碎石混凝土'};
set(gca,'YGrid', 'on','YTickLabel',methods); 
set(gca,'ytick',[1,2,3,4,5,6])
title(['PCA+BPNN识别准确率:' num2str(accTrain*100) '%'],'fontsize',13)%title(图形名称)
%% BP测试集
%%预测输出
Te_sim=round(sim(net,input1));
%% 准确率
accTest =sum(test_y==Te_sim)/length(test_y);%
figure
plot(Te_sim,'b*','linewidth',1)
hold on
plot(test_y,'ro','linewidth',1)
xlabel('测试集')
ylabel('标签(Label)')
legend('预测标签','实际标签')
methods = {'红砖','石灰','水泥','水泥砖','渣土','碎石混凝土'};
set(gca,'YGrid', 'on','YTickLabel',methods); 
set(gca,'ytick',[1,2,3,4,5,6])
title(['PCA+BPNN识别准确率:' num2str(accTest*100) '%'],'fontsize',13)%title(图形名称)
axis tight
%% 评价指标
[Accuracy,Precision,Recall,F_score]=Metrix(test_y,Te_sim);
%% 显示
disp(['准确率Accuracy:',num2str(Accuracy) '%'])
disp(['精准率Precision:',num2str(Precision) '%'])
disp(['召回率Recall:',num2str(Recall) '%'])
disp(['F_score:',num2str(F_score) '%'])

3 仿真结果

bp神经网络spss实例 bp神经网络 spss_matlab_02

4 参考文献

[1]王成, 文苗, 白丽红. 基于BP神经网络的细胞显微光谱自动分类[J]. 生命科学仪器, 2014, 12(6):3.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。