• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

RBF神经网络的matlab简单实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、径向基函数 (Radial Basis Function,RBF) 神经网络是一种性能良好的前向网络,具有最佳逼近、训练简洁、学习收敛速度快以及克服局部最小值问题的性能,目前已经证明径向基网络能够以任意精度逼近任意连续的函数。因此它已经被广泛应用于模式识别、非线性控制和图像处理等领域。

2、RBF神经网络的结构--RBF 神经网络的基本思想是用径向基函数(RBF)作为隐单元,的“基” ,构成隐含层的空间,隐含层对输入矢量进行变换,将低维的模式输入数据转换到高位空间内,使得在低维空间内的线性不可分为题在高维空间内线性可分。

3、RBF 神经网络神经网络有很强的非线性拟合能力,可映射任意复杂的非线性关系,而且学习规则简单,便于计算机实现。具有很强的鲁棒性、记忆能力、非线性映射能力以及强大的自学习能力,因此有很大的应用市场。RBF 神经网络是一种性能优良的前馈型神经网络,RBF 网络可以任意精度逼近任意的非线性函数,且具有全局逼近能力,从根本上解决了BP网络的局部最优问题,而且拓扑结构紧凑,结构参数可实现分离学习,收敛速度快。RBF 网络和模糊逻辑能够很好的实现互补,提高神经网络的学习泛化能力。

4、RBF 神经网络结构与多层前向网络类似,它一般由输入层、隐含层和输出层构成。第一层为输入层,由信号源节点组成,传递信号到隐层。第二层为隐层,隐层节点的变换函数是对中心点径向对称且衰减的非负非线性函数。第三层为输出层,一般是简单的线性函数,对输入模式作出响应。其结构如图3.8所示

RBF 神经网络输入层到隐含层之间的权值固定为1,隐含层单元的传递函数采用了径向基函数,隐含层神经元是将该层权值向量Wi与输入向量Xi之间的矢量距离与偏差bi 相乘后作为该神经元激活函数的输入。若取径向基函数为高斯函数,则神经元的输出为:

xi为核函数的中心,σ为函数宽度参数,用它来确定每一个径向基层神经元对其输入矢量,也就是X与w之间距离相对应的径向基函数的宽度。从上面的RBF网络的结构图我们可以,确定RBF网络结构的过程就是确定隐含层神经元的中心
xi、宽度σ以及输出权值w的过程。

5、RBF网络的学习算法

RBF网络要学习的参数有三个:基函数的中心xi和方差σ以及隐含层与输出层之间的权值w 。根据径向基函数中心选取方法的不同,RBF网络有多种学习方法,其中最常用的有四种学习方法:随机选取中心法、k-均值聚类算法、自组织选取中心法和正交最小二乘法。

①、确定基函数的中心xi

②、确定基函数的方差σ

一旦RBF 神经网络的中心确定以后,那么其宽度由下列公式来确定:

其中,n为隐含层单元的个数,di为所选中心之间的最大距离。

③、隐含层到输出层之间的权值w

 

 

RBF神经网络的介绍:点击打开链接

实验数据集 点击打开链接

[cpp] view plain copy
 
 
  1. clear all  
  2. clc   %清除命令窗口  
  3. load Data-Ass2;  
  4. d=data';  %求转置  
  5. dat=d(1:2500,1:2);  
  6. labels=d(1:2500,3);  
  7.   
  8.   
  9. inputNums=2; %输入层节点  
  10. outputNums=1; %输出层节点  许多情况下直接用1表示  
  11. hideNums=10; %隐层节点数  
  12. maxcount=1000; %最大迭代次数  
  13. samplenum=2500; %一个计数器,无意义  
  14. precision=0.001; %预设精度  
  15. alpha=0.01; %学习率设定值  
  16. a=0.5; %BP优化算法的一个设定值,对上组训练的调整值按比例修改   
  17. error=zeros(1,maxcount+1); %error数组初始化;目的是预分配内存空间  
  18. errorp=zeros(1,samplenum); %同上  
  19. w=rand(hideNums,outputNums); %10*3;w表隐层到输出层的权值  
  20.   
  21. %求聚类中心  
  22. [Idx,C]=kmeans(dat,hideNums);  
  23. %X 2500*2的数据矩阵   
  24. %K 表示将X划分为几类   
  25. %Idx 2500*1的向量,存储的是每个点的聚类标号   
  26. %C 10*2的矩阵,存储的是K个聚类质心位置  
  27.   
  28. %求扩展常数  
  29. dd=zeros(1,10);   
  30. for i=1:10  
  31. dmin=10000;  
  32. for j=1:10   
  33. ddd=(C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2;  
  34. if(ddd<dmin&&i~=j)  
  35. dmin=ddd;  
  36. end  
  37. end  
  38. dd(i)=dmin;  
  39. end  
  40.   
  41. %b为进行计算后隐含层的输入矩阵  
  42. b=zeros(2500,10);   
  43. for i=1:2500  
  44. for j=1:10   
  45. b(i,j)=exp( -( (dat(i,1)-C(j,1))^2+(dat(i,2)-C(j,2))^2 )/(2*dd(j)) );%dd为扩展常数  
  46. end  
  47. end  
  48.   
  49.   
  50. count=1;  
  51. while (count<=maxcount) %结束条件1迭代1000次  
  52.   
  53. c=1;  
  54. while (c<=samplenum)%对于每个样本输入,计算输出,进行一次BP训练,samplenum为2500  
  55.   
  56.     %o输出的值  
  57.     double o;  
  58.     o=0.0;  
  59.     for i=1:hideNums  
  60.         o=o+b(c,i)*w(i,1);  
  61.     end  
  62.   
  63.     %反馈/修改;   
  64.     errortmp=0.0;    
  65.     errortmp=errortmp+(labels(c,1)-o)^2; % 第一组训练后的误差计算    
  66.     errorp(c)=0.5*errortmp;       
  67.     yitao=labels(c,1)-o; %输出层误差  
  68.     for i=1:hideNums  %调节到每个隐藏点到输出点的权重  
  69.         w(i,1)=w(i,1)+alpha*yitao*b(c,i);%权值调整  
  70.     end  
  71.   
  72.     c=c+1; %输入下一个样本数据  
  73. end  %第二个while结束;表示一次训练结束  
  74.   
  75.   
  76. %求最后一次迭代的误差  
  77. double tmp;  
  78. tmp=0.0; %字串8   
  79. for i=1:samplenum  
  80.     tmp=tmp+errorp(i)*errorp(i);%误差求和  
  81. end  
  82. tmp=tmp/c;  
  83. error(count)=sqrt(tmp);%求迭代第count轮的误差求均方根,即精度  
  84. if (error(count)<precision)%另一个结束条件  
  85.     break;  
  86. end  
  87. count=count+1;%训练次数加1  
  88. end  
  89.   
  90. %测试  
  91. test=zeros(500,10);   
  92. for i=2501:3000  
  93. for j=1:10   
  94. test(i-2500,j)=exp( -( (d(i,1)-C(j,1))^2+(d(i,2)-C(j,2))^2 )/(2*dd(j)) );%dd为扩展常数  
  95. end  
  96. end  
  97.   
  98. count=0;  
  99. for i=2501:3000  
  100. net=0.0;  
  101. for j=1:hideNums  
  102. net=net+test(i-2500,j)*w(j,1);  
  103. end  
  104. if( (net>0&&d(i,3)==1) || (net<=0&&d(i,3)==-1) )  
  105. count=count+1;  
  106. end  
  107. end  

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi连接sqlite方法总结发布时间:2022-07-18
下一篇:
在Delphi程序中动态设置ODBC数据源发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap