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)