RBF神经网络的matlab简单实现

来源:互联网 发布:算法导论 微盘 编辑:程序博客网 时间:2024/06/05 11:03

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

实验数据集 点击打开链接

代码

clear allclc   %清除命令窗口load Data-Ass2;d=data';  %求转置dat=d(1:2500,1:2);labels=d(1:2500,3);inputNums=2; %输入层节点outputNums=1; %输出层节点  许多情况下直接用1表示hideNums=10; %隐层节点数maxcount=1000; %最大迭代次数samplenum=2500; %一个计数器,无意义precision=0.001; %预设精度alpha=0.01; %学习率设定值a=0.5; %BP优化算法的一个设定值,对上组训练的调整值按比例修改 error=zeros(1,maxcount+1); %error数组初始化;目的是预分配内存空间errorp=zeros(1,samplenum); %同上w=rand(hideNums,outputNums); %10*3;w表隐层到输出层的权值%求聚类中心[Idx,C]=kmeans(dat,hideNums);%X 2500*2的数据矩阵 %K 表示将X划分为几类 %Idx 2500*1的向量,存储的是每个点的聚类标号 %C 10*2的矩阵,存储的是K个聚类质心位置%求扩展常数dd=zeros(1,10); for i=1:10dmin=10000;for j=1:10 ddd=(C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2;if(ddd<dmin&&i~=j)dmin=ddd;endenddd(i)=dmin;end%b为进行计算后隐含层的输入矩阵b=zeros(2500,10); for i=1:2500for j=1:10 b(i,j)=exp( -( (dat(i,1)-C(j,1))^2+(dat(i,2)-C(j,2))^2 )/(2*dd(j)) );%dd为扩展常数endendcount=1;while (count<=maxcount) %结束条件1迭代1000次c=1;while (c<=samplenum)%对于每个样本输入,计算输出,进行一次BP训练,samplenum为2500%o输出的值double o;o=0.0;for i=1:hideNumso=o+b(c,i)*w(i,1);end%反馈/修改; errortmp=0.0;  errortmp=errortmp+(labels(c,1)-o)^2; % 第一组训练后的误差计算  errorp(c)=0.5*errortmp;     yitao=labels(c,1)-o; %输出层误差for i=1:hideNums  %调节到每个隐藏点到输出点的权重w(i,1)=w(i,1)+alpha*yitao*b(c,i);%权值调整endc=c+1; %输入下一个样本数据end  %第二个while结束;表示一次训练结束%求最后一次迭代的误差double tmp;tmp=0.0; %字串8 for i=1:samplenumtmp=tmp+errorp(i)*errorp(i);%误差求和endtmp=tmp/c;error(count)=sqrt(tmp);%求迭代第count轮的误差求均方根,即精度if (error(count)<precision)%另一个结束条件break;endcount=count+1;%训练次数加1end%测试test=zeros(500,10); for i=2501:3000for j=1:10 test(i-2500,j)=exp( -( (d(i,1)-C(j,1))^2+(d(i,2)-C(j,2))^2 )/(2*dd(j)) );%dd为扩展常数endendcount=0;for i=2501:3000net=0.0;for j=1:hideNumsnet=net+test(i-2500,j)*w(j,1);endif( (net>0&&d(i,3)==1) || (net<=0&&d(i,3)==-1) )count=count+1;endend


 

4 0
原创粉丝点击