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)

 

posted @ 2018-09-05 21:02  肖邦、维也纳  阅读(2533)  评论(0编辑  收藏  举报