对比分析了几种常见的神经网络《BP、RBF(径向基)、GRNN(广义回归)、PNN(概率)》,并在文末附代码,想要训练测试数据可以QQ2859340499。

1. BP神经网络:
BP神经网络是一种多层的前馈神经网络,有导师学习的神经网络。其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:输入向量应为n个特征。

BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
其中神经元,或称神经单元/神经节点,是神经网络基本的计算单元,其计算函数称为激活函数(activation function),用于在神经网络中引入非线性因素,可选择的激活函数有:Sigmoid函数、双曲正切函数(tanh)、ReLu函数(Rectified Linear Units),softmax等。
训练一个神经网络的全流程:
1.初始化神经网络,对每个神经元的w和b赋予随机值;
2.输入训练样本集合,对于每个样本,将输入给到神经网络的输入层,进行一次正向传播得到输出层各个神经元的输出值;
3.求出输出层的误差,再通过反向传播算法,向后求出每一层(的每个神经元)的误差;
4.通过误差可以得出每个神经元的∂C/∂w、∂C/∂b,再乘上负的学习率(-η),就得到了Δw、Δb,将每个神经元的w和b更新为 w+Δw、b+Δb;
完成训练之后,一般情况下我们都能得到一个损失比较小的神经网络。

下面是RBF,GRNN,PNN神经网络,相比最经典BP神经网络(Backpropagation neural networks,误差是反向传播,而输入到输出是前向传播的,相对这种有导师学习的神经网络,它的原理相对简单,但是它的参数比较多,需要调整的空间比较大。比如权值和阈值的确定困难。),这三个神经网络的参数只有一个spread, 因此要十分注意spread的选择。

2. RBF(径向基)神经网络:
通过对比来了解RBF神经网络。与 BP 神经网络的区别在于训练过程——其参数初始化具有一定方法,并非随机,隐含层的末尾使用了径向基函数,它的输出经过加权和得到。

径向基函数(Radial Basis Function,RBF)神经网络是一种三层网络.其学习过程和BP算法类似,二者的主要区别在于:
(1)隐藏层的激活函数不同,BP算法的激活函数是sigmod函数,RBF的激活函数是高斯基函数;
(2)BP算法是全局的逼近,每次学习都要进行所有网络连接的权重迭代更新,RBF是一种局部逼近,其输入层到输层是非线性映射,但其隐藏层到输出层是线性映射的.且输入层到隐藏层直接求和,不需要参数迭代。
RBF神经网络是一种性能优良的前馈型神经网络,RBF网络可以任意精度逼近任意的非线性函数,且具有全局逼近能力,从根本上解决了BP网络的局部最优问题,而且拓扑结构紧凑,结构参数可实现分离学习,收敛速度快。
RBF网络的优点:
① 它具有唯一最佳逼近的特性,且无局部极小问题存在。
② RBF神经网络具有较强的输入和输出映射功能,并且理论证明在前向网络中RBF网络是完成映射功能的最优网络。
③ 网络连接权值与输出呈线性关系。
④ 分类能力好。
⑤ 学习过程收敛速度快。
总结:RBF网络和BP网络一样能以任意精度逼近任何非线性函数。但由于它们使用的激励函数不同,其逼近性能也不相同。Poggio和Girosi已经证明,RBF网络是连续函数的最佳逼近,而BP网络不是。BP网络使用的Sigmoid函数具有全局特性,它在输入值的很大范围内每个节点都对输出值产生影响,并且激励函数在输入值的很大范围内相互重叠,因而相互影响,因此BP网络训练过程很长。此外,由于BP算法的固有特性,BP网络容易陷入局部极小的问题不可能从根本上避免,并且BP网络隐层节点数目的确定依赖于经验和试凑,很难得到最优网络。采用局部激励函数的RBF网络在很大程度上克服了上述缺点,RBF不仅有良好的泛化能力,而且对于每个输入值,只有很少几个节点具有非零激励值,因此只需很少部分节点及权值改变。学习速度可以比通常的BP算法提高上千倍,容易适应新数据,其隐层节点的数目也在训练过程中确定,并且其收敛性也较BP网络易于保证,因此可以得到最优解。

3. GRNN神经网络(函数逼近)
输入层和隐含层与 RBF 神经网络一致,这里的 直接由输出矩阵代替,并在隐含层与输出层之间和激活函数进行点乘。

**(尤其适合解决曲线拟合问题)**广义回归神经网络是径向基神经网络的一种,径向基神经元和线性神经元可以建立广义回归神经网络,它是径RBF网络的一种变化形式,经常用于函数逼近。在某些方面比RBF网络更具优势。GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好,网络还可以处理不稳定数据。

4. PNN神经网络(模式分类)
径向基神经元和竞争神经元还可以组成概率神经网络。PNN也是RBF的一种变化形式,结构简单训练快捷,特别适合于模式分类问题的解决。
输入层和隐含层与RBF神经网络一致,不同点是最后的输出环节使用了一个竞争函数。概率神经网络(Probabilistic Neural Network)的网络结构类似于RBF神经网络,但不同的是,PNN是一个前向传播的网络,不需要反向传播优化参数。这是因为PNN结合了贝叶斯决策,来判断测试样本的类别。

与传统BP 网络相比较,PNN 网络具有如下主要优点 :
(1) 训练快速,其训练时间仅仅略大于读取数据的时间。
(2) 无论分类问题多么复杂,只要有足够多的训练数据,可以保证获得贝叶斯准则下的最优解。
(3) 允许增加或减少训练数据而无需重新进行长时间的训练。
总结:概率神经网络一般有以下四层:输入层、模式层、求和层和输出层。有的资料中也把模式层称为隐含层,把求和层叫做竞争层。其中,输入层负责将特征向量传入网络,输入层个数是样本特征的个数。模式层通过连接权值与输入层连接。计算输入特征向量与训练集中各个模式的匹配程度,也就是相似度,将其距离送入高斯函数得到模式层的输出。模式层的神经元的个数是输入样本矢量的个数,也就是有多少个样本,该层就有多少个神经元。求和层,就是负责将各个类的模式层单元连接起来,这一层的神经元个数是样本的类别数目。输出层的话,就负责输出求和层中得分最高的那一类。(在分类问题上,有优势)

总结这三种网络,由上图可以得出他们的主要区别是在输出层,即RBF、GRNN、PNN的各自的输出层分别是Linear Layer、Special Linear Layer、Competitive Layer,即在编写代码的时候,只要注意改变他们在输出层代码的区别。

程序:
BP:

%% I. 清空环境变量
clear all
clc%% II. 训练集/测试集产生
%%
% 1. 导入数据
load 实验二过氧化值因素.mat
load 实验二过氧化值结果.mat%%
% 2. 随机产生训练集和测试集
% temp = randperm(size(NIR,1));
% 训练集——50个样本
P_train = gyn((1:50),:)';
T_train = gyr((1:50),:)';
% 测试集——10个样本
P_test = gyn((51:end),:)';
T_test = gyr((51:end),:)';
N = size(P_test,2);%% III. 数据归一化
[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. BP神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newff(p_train,t_train,5);%%
% 2. 设置训练参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-13;
net.trainParam.lr = 0.000001;%%
% 3. 训练网络
net = train(net,p_train,t_train);%%
% 4. 仿真测试
t_sim = sim(net,p_test);%%
% 5. 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);%% V. 性能评价
%%
% 1. 相对误差error
error = abs(T_sim - T_test)./T_test;%%
% 2. 决定系数R^2
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)); %%
% 3. 结果对比
result = [T_test' T_sim' error']%% VI. 绘图
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比';['R^2=' num2str(R2)]};
title(string)

RBF:

%% I. 清空环境变量
clear all
clc%% II. 训练集/测试集产生
%%
% 1. 导入数据
load 实验二过氧化值因素.mat
load 实验二过氧化值结果.mat%%
% 2. 随机产生训练集和测试集
% temp = randperm(size(gyn,1));
% 训练集——50个样本
P_train = gyn((1:45),:)';
T_train = gyr((1:45),:)';
% 测试集——10个样本
P_test = gyn((46:end),:)';
T_test = gyr((46:end),:)';
N = size(P_test,2);%% III. RBF神经网络创建及仿真测试
%%
% 1. 创建网络
net = newrbe(P_train,T_train,99000);%%
% 2. 仿真测试
T_sim = sim(net,P_test);%% IV. 性能评价
%%
% 1. 相对误差error
error = abs(T_sim - T_test)./T_test;%%
% 2. 决定系数R^2
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)); %%
% 3. 结果对比
result = [T_test' T_sim' error']%% V. 绘图
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比';['R^2=' num2str(R2)]};
title(string)

GRNN、PNN:

%% I. 清空环境变量
clear all
clc%% II. 训练集/测试集产生
%%
% 1. 导入数据
load iris_data.mat%%
% 2 随机产生训练集和测试集
P_train = [];
T_train = [];
P_test = [];
T_test = [];
for i = 1:3temp_input = features((i-1)*50+1:i*50,:);temp_output = classes((i-1)*50+1:i*50,:);n = randperm(50);% 训练集——120个样本P_train = [P_train temp_input(n(1:40),:)'];T_train = [T_train temp_output(n(1:40),:)'];% 测试集——30个样本P_test = [P_test temp_input(n(41:50),:)'];T_test = [T_test temp_output(n(41:50),:)'];
end%% III. 模型建立
result_grnn = [];
result_pnn = [];
time_grnn = [];
time_pnn = [];
for i = 1:4for j = i:4p_train = P_train(i:j,:);p_test = P_test(i:j,:);%% % 1. GRNN创建及仿真测试t = cputime;% 创建网络net_grnn = newgrnn(p_train,T_train);% 仿真测试t_sim_grnn = sim(net_grnn,p_test);T_sim_grnn = round(t_sim_grnn);t = cputime - t;time_grnn = [time_grnn t];result_grnn = [result_grnn T_sim_grnn'];%%% 2. PNN创建及仿真测试t = cputime;Tc_train = ind2vec(T_train);% 创建网络net_pnn = newpnn(p_train,Tc_train);% 仿真测试Tc_test = ind2vec(T_test);t_sim_pnn = sim(net_pnn,p_test);T_sim_pnn = vec2ind(t_sim_pnn);t = cputime - t;time_pnn = [time_pnn t];result_pnn = [result_pnn T_sim_pnn'];end
end%% IV. 性能评价
%%
% 1. 正确率accuracy
accuracy_grnn = [];
accuracy_pnn = [];
time = [];
for i = 1:10accuracy_1 = length(find(result_grnn(:,i) == T_test'))/length(T_test);accuracy_2 = length(find(result_pnn(:,i) == T_test'))/length(T_test);accuracy_grnn = [accuracy_grnn accuracy_1];accuracy_pnn = [accuracy_pnn accuracy_2];
end%%
% 2. 结果对比
result = [T_test' result_grnn result_pnn]
accuracy = [accuracy_grnn;accuracy_pnn]
time = [time_grnn;time_pnn]%% V. 绘图
figure(1)
plot(1:30,T_test,'bo',1:30,result_grnn(:,4),'r-*',1:30,result_pnn(:,4),'k:^')
grid on
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集预测结果对比(GRNN vs PNN)';['正确率:' num2str(accuracy_grnn(4)*100) '%(GRNN) vs ' num2str(accuracy_pnn(4)*100) '%(PNN)']};
title(string)
legend('真实值','GRNN预测值','PNN预测值')
figure(2)
plot(1:10,accuracy(1,:),'r-*',1:10,accuracy(2,:),'b:o')
grid on
xlabel('模型编号')
ylabel('测试集正确率')
title('10个模型的测试集正确率对比(GRNN vs PNN)')
legend('GRNN','PNN')
figure(3)
plot(1:10,time(1,:),'r-*',1:10,time(2,:),'b:o')
grid on
xlabel('模型编号')
ylabel('运行时间(s)')
title('10个模型的运行时间对比(GRNN vs PNN)')
legend('GRNN','PNN')

机器学习(一)——BP、RBF(径向基)、GRNN(广义回归)、PNN(概率)神经网络对比分析(附程序、数据)相关推荐

  1. 机器学习 | MATLAB实现RBF径向基神经网络newrbe参数设定

    机器学习 | MATLAB实现RBF径向基神经网络newrbe参数设定 目录 机器学习 | MATLAB实现RBF径向基神经网络newrbe参数设定 基本介绍 函数描述 寄语生活 参考资料 开心一刻 ...

  2. RBF神经网络、GRNN广义回归神经网络、PNN概率神经网络

    RBF神经网络介绍 RBF神经网络能够逼近任意的非线性函数 RBF可以处理系统内部难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式 ...

  3. 数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合

    数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合 目录 数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合 基本介绍 程序设计 模型差异 参考资料 基本介绍 RBF神将网 ...

  4. 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出

    回归预测 | MATLAB实现RBF径向基神经网络多输入单输出 目录 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出 预测效果 基本介绍 模型结构 程序设计 参考资料 预测效果 基本介 ...

  5. 回归预测 | MATLAB实现RBF径向基神经网络非线性函数回归

    回归预测 | MATLAB实现RBF径向基神经网络多非线性函数回归 目录 回归预测 | MATLAB实现RBF径向基神经网络多非线性函数回归 基本介绍 程序设计 学习总结 参考资料 基本介绍 RBF神 ...

  6. 时间序列分析 | RBF径向基神经网络时间序列预测(Matlab完整程序)

    时间序列分析 | RBF径向基神经网络时间序列预测(Matlab完整程序) 目录 时间序列分析 | RBF径向基神经网络时间序列预测(Matlab完整程序) 预测结果 评价指标 模型介绍 完整程序 预 ...

  7. 回归预测 | MATLAB实现RBF径向基神经网络多输入多输出预测

    回归预测 | MATLAB实现RBF径向基神经网络多输入多输出预测 目录 回归预测 | MATLAB实现RBF径向基神经网络多输入多输出预测 预测效果 基本介绍 模型结构 程序设计 参考资料 预测效果 ...

  8. 模式分类识别 | RBF径向基神经网络多特征分类预测(Matlab完整程序)

    模式分类识别 | RBF径向基神经网络多特征分类预测(Matlab完整程序) 目录 模式分类识别 | RBF径向基神经网络多特征分类预测(Matlab完整程序) 预测结果 基本介绍 程序设计 参考资料 ...

  9. 【姿态识别】基于HOG特征提取和GRNN广义回归神经网络的人体姿态识别matlab仿真

    1.软件版本 matlab2013b 2.本算法理论知识 GRNN广义回归神经网络的理论基础是非线性核回归分析,非独立变量y相对于独立变量x的回归分析实际上是计算具有最大概率值的y.设随机变量x和y的 ...

最新文章

  1. Druid数据库连接池使用参考
  2. MFC如何打开文件路径
  3. CCNA实验之--三层交换
  4. 「BATJ面试系列」并发编程
  5. 通过邮箱验证注册——.net代码
  6. iphonex如何关机_iphonex常用手势操作有哪些 iphonex常用手势操作介绍【详解】
  7. zookeeper + kafka集群搭建详解
  8. 介绍一些平时用得到的服务/组件
  9. mysql高可用方案MHA介绍
  10. 体验最火的敏捷——SCRUM(厦门,2014.1.4)
  11. 高晓松谈管理:自嘲总被员工管
  12. HTTP普及帖2:简单的HTTP(上)
  13. 使用loadrunner录制winsock协议的程序(原创)
  14. MySQL 触发器例子(两张表同步增加和删除)
  15. 最全的Vim操作快捷键
  16. window eclipse快速导入svn项目以及软件汉化
  17. 计算机中缺少d3dx11_43.dll,韩博士传授win10系统运行软件提示计算机丢失d3dx11_43.dll的处理对策...
  18. paypal标准支付流程图
  19. 关于升级短信源码开发接入SMPP通道
  20. ACG识图搜索引擎整合及优势分析

热门文章

  1. MG本地服务器如何改ip
  2. 机器人中的 jog 是什么意思?
  3. OpenCV深入学习(5)--直方图之calcHist使用
  4. LibreCAD Windows编译问题集
  5. Linux进程信号之阻塞信号
  6. SpringBoot#InitBinder
  7. 软件开发过程 文档
  8. HRBUST 1849 商品中心
  9. 【无标题】删除数组中的重复元素
  10. Linux创建和删除目录