老饼讲解-神经网络 机器学习 神经网络 深度学习
综合杂文

【Demo】广义回归神经网络-Matlab代码Demo

作者 : 老饼 发表日期 : 2022-06-09 15:09:32 更新日期 : 2023-05-09 06:23:10
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



广义回归神经网络GRNN全称为(General Regression Neural Network)

它由美国Donald F.Specht于1991年提出,是一种基于非线性的回归理论的神经网络

本文讲解matlab神经网络工具箱使用广义回归神经网络的Demo

并提供入参说明(基本参考于matlab2014b函数newgrnn的官方说明)



  01. GRNN-简单Demo   


matlab工具箱建立广义回归神经网络(newgrnn)的Demo代码

2014b版matlab实测已跑通


%代码说明:径向基newgrnn的matlab工具箱使用Demo
%来自《老饼讲解神经网络》www.bbbdata.com ,matlab版本:2014b
%-----------------------------------------------------
%----数据准备----
x1  = 1:0.2:10;
x2  = -5:0.2:4;
X   = [x1;x2];                % 输入数据,注意中间是分号
Y   = sin (X(1,:))+X(2,:);    % 输出数据

%----网络训练----
net = newgrnn(X,Y);           % 网络建立与训练
simY = sim(net, X);           % 用建好的网络拟合原始数据

%----结果对比----
figure(1);
t = 1:size(Y,2);
plot(t,Y,'*',t,simY,'r')  
广义回归神经网络虽然名字里没有带有“径向基”字样
但实际上它仍然属于径向基神经网络的一种
主要是它的传递函数用的就是径向基
广义回归神经网络和精确径向基神经网络一样
可以极快的建立起来
因为它们几乎不用作任何计算
更不会涉及径向基神经网络(newrb)逐步迭代的学习方式

因此
  它最大的优点是
 
1.可以极快建立                                                                        
 2.只要扩展系数spread设置得当,误差会比较小,甚至会无误差
 
 最大的缺点
 
隐层神经元太多,有多少个样本,就有多少个隐层神经元         





   02. newgrnn-工具箱说明    


本节翻译matlab给出的doc newgrnn 文档

帮助大家更进一步使用newgrnn

为方便大家理解,本人作了些少改动


语法:


net = newgrnn(P,T,spread) 有三个入参,返回一个新的广义回归神经网络。



描述:


广义回归神经网络(grnn)是一种通常用于函数拟合的径向基神经网络,grnn可以很快的被设计出来。



入参说明:


P: R行Q列的输入矩阵,R个输入变量,Q个样本。
T :S行Q列的目标输出矩阵,S个输出变量,Q个样本。
spread: 径向基函数的扩展系数(默认=1.0)
 扩展系数spread越大,拟合的函数越平滑
拟合样本与样本非常靠近的数据,建议使用一个比样本之间的距离更小的扩展系数
拟合很平滑的数据,用一个大的扩展系数





  03. GRNN的构建算法  



    GRNN的构建算法   


   grnn神经网络的结构    
newgrnn创建一个三层的神经网络:
 👉 输入层
 👉 隐层   
 👉 输出层

 由于不用训练,通常称为“设计一个广义回归神经网络”,而不是“训练”
 grnn神经网络的计算方式
 
 
隐层的计算方式
 隐层拥有径向基神经元
用dist来计算权重输入 
用netprod计算网络输入
 
 
输出层的计算方式
 输出层拥有线性神经元
用normprod计算输入权重
用netsum计算网络输入  

✍️只有隐层有阈值
网络的权重、阈值的设计
 
 
关于输入层到隐层的权重、阈值
 
newgrnn将输入层到隐层的权重设置为P'
阈值设为0.8326/spread
这样是为了使权重输入为+/– spread时,径向基的值为0.5

 
关于隐层到输出层的权重
 隐层到输出层的权重则直接设为T(训练样本的输出)









  End  









联系老饼