BP神经网络经典例子——

基于近红外光谱的汽油辛烷值测试

我这里找到了两个不同的代码(matlab实现),都可以试一下,需要数据文件的再可以找我要下,第一个方法比较简练,第二个十分详细(图多)。

代码:

load spectra_data.mat %第一个方法,生成图较少

temp = randperm(size(NIR,1)); 

P_train = NIR(temp(1:50),:)';  

T_train = octane(temp(1:50),:)';

P_test = NIR(temp(51:end),:)';

T_test = octane(temp(51:end),:)';

N = size(P_test,2);

net = newrbe(P_train,T_train,0.3); 

w1=net.iW{1,1}

isequal(w1',P_train) 

b1=net.b{1}        

T_sim = sim(net,P_test);

error = abs(T_sim - T_test)./T_test;

R2 = (N * sum(T_sim .* T_test) - sum(T_sim)
* sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N *
sum((T_test).^2) - (sum(T_test))^2)); 

result = [T_test' T_sim' error'] 

figure

plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')

legend('真实值','预测值')

xlabel('预测样本')

ylabel('辛烷值')

string = {'RBF:RBF实现测试集辛烷值含量预测结果对比—Jason niu';['R^2=' num2str(R2)]};

title(string)




clear all;%第二个方法
clc

load spectra_data.mat%产生训练集/测试集

temp=randperm(size(NIR,1));%随机产生训练集和测试集

P_train=NIR(temp(1:50),:)';

T_train=octane(temp(1:50),:)'; %训练集50个样本P_test=NIR(temp(51:end),:)';

T_temp=octane(temp(51:end),:)'; %测试集 10个样本

N=size(P_test,2);

 

net=newff(P_train,T_train,5);%创建/训练BP神经网络

net.trainParam.epochs=1000;

net.trainParam.goal=1e-3;

net.trainParam.lr=0.01;

net=train(net,P_train,T_train); %训练网络

T_sim_bp=sim(net,P_test); %仿真测试

 

 

net=newrbe(P_train,T_train,0.5);

%创建BPF神经网络

T_sim_rbf=sim(net,P_test);

%仿真测试

 

%性能评价

error_bp=abs(T_sim_bp-T_test)./T_test;

error_rbf=abs(T_sim_rbf-T_test)./T_test;

%相对误差

R2_bp=(N*sum(T_sim_bp.*T_bp)-sum(T_sim_bp)*sum(T_test))^2/((N*sum((T_sim_bp).^2)-(sum(T_sim_bp))^2)*(N*sum((T_test).^2)-(sum(T_test))^2));

%决定系数R^2

result=[T_test'T_sim_bp'T_sim_rbf'error_bp'error_rbf'] %结果对比

 

figure %绘图

plot(1:N,T_test,'b:*',1:N,T_sim_bp,'r-o',1:N,T_sim_rbf,'k-.^')

legend('真实值','BP预测值','RBF预测值')

xlabel('预测样本')

ylabel('辛烷值')

string={'测试集辛烷值含量预测结果对比(BP vs RBF)';['R^2='num2str(R2_bp)'(bp)''R^2='num2str(R2_rbf)'(RBF)']};

title(string)