RBF 和 BP 神經網絡的比較


Contents

I. 清空環境變量

clear all
clc

II. 訓練集/測試集產生

1. 導入數據

load spectra_data.mat

2. 隨機產生訓練集和測試集

temp = randperm(size(NIR,1));
% 訓練集——50個樣本
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)';
% 測試集——10個樣本 P_test = NIR(temp(51:end),:)'; T_test = octane(temp(51:end),:)'; N = size(P_test,2); 

III. 數據歸一化,BP 網絡需要歸一化處理

[p_train, ps_input] = mapminmax(P_train,0,1);
p_test = mapminmax('apply',P_test,ps_input);

[t_train, ps_output] = mapminmax(T_train,0,1);

IV. RBF/BP神經網絡創建及仿真測試

1. 創建網絡

net_rbf = newrbe(P_train,T_train,30);
net_bp = newff(p_train, t_train, 9);

2. 設置 BP 網絡 訓練參數, RBF 網絡不需要設置參數,除了spread

net_bp.trainParam.epochs = 1000;
net_bp.trainParam.goal = 1e-3;
net_bp.trainParam.lr = 0.01;

3. BP網絡 訓練, RBF 不需要訓練

net_bp = train(net_bp,p_train,t_train);

4. 仿真測試

T_sim_rbf = sim(net_rbf,P_test);
t_sim_bp = sim(net_bp,p_test);

5. 數據反歸一化

T_sim_bp = mapminmax('reverse',t_sim_bp,ps_output);

V. 性能評價

1. 相對誤差error

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

2. 決定系數R^2

R2_rbf = (N * sum(T_sim_rbf .* T_test) - sum(T_sim_rbf) * sum(T_test))^2 / ((N * sum(T_sim_rbf.^2) - (sum(T_sim_rbf))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));
R2_bp = (N * sum(T_sim_bp .* T_test) - 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));

3. 結果對比

result = [T_test' T_sim_rbf' T_sim_bp' error_rbf' error_bp']
result =

   83.4000   83.8939   83.3325    0.0059    0.0008
   86.6000   86.8234   86.8816    0.0026    0.0033
   88.5500   88.6082   88.1839    0.0007    0.0041
   88.7000   88.6681   88.9107    0.0004    0.0024
   88.4500   88.1451   88.2298    0.0034    0.0025
   86.1000   86.2906   86.3526    0.0022    0.0029
   88.1000   88.2477   87.3687    0.0017    0.0083
   88.7000   88.6095   88.9943    0.0010    0.0033
   86.5000   86.4926   86.5093    0.0001    0.0001
   85.4000   85.7454   86.0366    0.0040    0.0075

VI. 繪圖

figure
plot(1:N,T_test,'b:*',1:N,T_sim_rbf,'r-o') legend('真實值','預測值') xlabel('預測樣本') ylabel('辛烷值') string = {'基於RBF網絡測試集辛烷值含量預測結果對比';['R^2=' num2str(R2_rbf)]}; title(string) figure plot(1:N,T_test,'b:*',1:N,T_sim_bp,'r-o') legend('真實值','預測值') xlabel('預測樣本') ylabel('辛烷值') string = {'基於BP網絡測試集辛烷值含量預測結果對比';['R^2=' num2str(R2_bp)]}; title(string) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM