BP神经网络结合实际案例"精辟"分享




一、什么是BP神经网络?

ai bp神经网络 bp神经网络实战_归一化


用简单一句话也可以描述为:

ai bp神经网络 bp神经网络实战_归一化_02

二、引入实际案列“空气质量评估训练”讲解

1.图中为我的原始数据,选取空气质量中的六种指标,通过训练后可根据指标含量判断出空气质量等级(1-6等级)。

ai bp神经网络 bp神经网络实战_ai bp神经网络_03


2.数据处理
将原始数据分为4个表格,通过图可见:

ai bp神经网络 bp神经网络实战_数据_04


inputtrain为所有指标数据,注意只有指标数据:

ai bp神经网络 bp神经网络实战_ai bp神经网络_05


同理:outputrain为所有指标对应的等级数据:

ai bp神经网络 bp神经网络实战_归一化_06


inputtest则为按一定比例选取的inputtrain的数据,我选取的1/10。outputtest同理为取outputrain中一定比例,注意取的数据指标和空气等级要对应。3.导入数据

ai bp神经网络 bp神经网络实战_ai bp神经网络_07


4.结果

ai bp神经网络 bp神经网络实战_数据_08


ai bp神经网络 bp神经网络实战_神经网络_09


ai bp神经网络 bp神经网络实战_数据_10

MATLAB代码

代码如下(示例):

%%初始化
clear
close all
clc

%%读入数据
%%数据从excel表中导入
%%输入400条数据,并进行转置“'”转置符
input_train=xlsread('\date.xlsx','inputtrain')';
%%输出400条数据,并进行转置
output_train=xlsread('\date.xlsx','outputtrain')';
%%输入测试训练数据44条
input_test=xlsread('\date.xlsx','inputtest')';
%%输出测试训练数据44条
output_test=xlsread('\date.xlsx','outputtest')';

%%数据归一化
%%将input_train归一化【0,1】
[inputn,inputs]=mapminmax(input_train,0,1);
[outputn,outputs]=mapminmax(output_train);
inputn_test=mapminmax('apply',input_test,inputs);

%%构建BP神经网络
%%对进行输入的400条数据和输出的400条数据进行训练
net=newff(inputn,outputn,20); %%中间神经元的个数20

%%设置参数
net.trainParam.epochs=1000; %%训练次数
net.trainParam.lr=0.01; %%学习速率
net.trainParam.goal=0.000001; %%训练目标最小误差

%%BP神经网络训练
net=train(net,inputn,outputn);

%%查看net参数
view(net)

%%BP神经网络测试
an=sim(net,inputn_test);%%用训练好的模型进行仿真
test_simu=mapminmax('reverse',an,outputs);%%预测结果反归一化
error=test_simu-output_test;%%预测值与真实值的误差
test_simu=round(test_simu);%%d对输出结果取整

%%计算准确率
rightnumber=0;
for i=1:size(output_test,2)
    if(test_simu==output_test) %%当输出和期望值相等时=1
        rightnumber=rightnumber+1;
    end
end       
rightratio=rightnumber/size(output_test,2)*100;
sprintf('测试准确率=%0.2f',rightratio)

%%真实值与预测值误差比较
figure(1)
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
hold on
plot(error,'square','MarkerFaceColor','b')
legend('期望值','预测值','误差')
xlabel('数据数组'),ylabel('值'),title('测试集预测值与期望值的误差对比'),set(gca,'fontsize',1)

%%计算误差
[~,len]=size(output_test);
MEA1=sum(abs(error./output_test))/len;
MSE1=error*error'/len;
RMSE1=MSE1^(1/2);
disp('误差计算')
disp(['平均绝对误差MEA为:',num2str(MEA1)])
disp(['均方误差MSE为:',num2str(MSE1)])
disp(['均方根误差RMSE为:',num2str(RMSE1)])

%%将训练好的网络保存到save文件中
save('train_net.mat','net');
msgbox('BP训练网络已保存至train_net.mat');

参考出处和数据下载可点击此链接:https://www.ilovematlab.cn/thread-220251-1-1.html


总结


关键函数解读以及BP神经网络的局限性

ai bp神经网络 bp神经网络实战_ai bp神经网络_11

ai bp神经网络 bp神经网络实战_神经网络_12