天天看點

BP神經網絡經典例子

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)



           

繼續閱讀