机器学习+周志华+第五章习题+解决异或问题的单层RBF神经网络

来源:互联网 发布:rar解压软件下载 编辑:程序博客网 时间:2024/05/22 00:22

5.7根据式(5.18)和(5.19),试构造一个能解决异或问题的单层RBF神经网络。

RBF(Radial Basis Function,径向基函数)网络,是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出的线性组合。

RBF隐层相当于把输入映射到一个更高维空间,使得不可分的数据线性可分。

对于异或问题,构造数据:

异或真值表X1X2X3000011101110


设计RBF网:

(1)输入层:由于有2个输入,所以输入层2个神经元
(2)隐层:隐层神经元越多拟合的越好,这里我设置十个隐层神经元。
(3)输出层:1个神经元。

该网络参数有:

(1)Wi:隐层第i个神经元与输出神经元的权值。
(2)Ci:隐层第i个神经元的中心
(3)βi:样本与第i个神经元的中心的距离的缩放系数
两步训练RBF网络:
(1)确定Ci常用的方法有:随机采样、聚类等。、
(2)利用ABP算法来确定参数Wi和βi。



在代码中令学习率:  η=0.5


kn是指:迭代了407次。
E是指:累积误差。
py是指:真是的预测输出,即输出层的输出。

RBF网络的MATLAB代码为:
clearx=[0 0;0 1; 1 0;1 1];y=[0;1;1;0];hideNum=10;               %隐层神经元数目,要求必须大于输入层个数rho=rand(4,hideNum);       %径向基函数的值py=rand(4,1);             %输出值w=rand(1,hideNum);        %隐层第i个神经元与输出神经元的权值beta=rand(1,hideNum);     %样本与第i个神经元的中心的距离的缩放系数eta=0.5;                    %学习率c=rand(hideNum,2);     %隐层第i个神经元的中心kn=0;                 %累计迭代的次数sn=0;                 %同样的累积误差值累积次数previous_E=0;          %前一次迭代的累积误差while(1)  kn=kn+1;  E=0;  %计算每个样本的径向基函数值  for i=1:4    for j=1:hideNum      p(i,j)=exp(-beta(j)*(x(i,:)-c(j,:))*(x(i,:)-c(j,:))');     end     py(i)=w*p(i,:)';    end   %计算累积误差   for i=1:4     E=E+((py(i)-y(i))^2);    %计算均方误差   end     E=E/2;    %累积误差      %更新w、beta   delta_w=zeros(1,hideNum);   delta_beta=zeros(1,hideNum);   for i=1:4     for j=1:hideNum       delta_w(j)=delta_w(j)+(py(i)-y(i))*p(i,j);       delta_beta(j)= delta_beta(j)-(py(i)-y(i))*w(j)*(x(i,:)-c(j,:))*(x(i,:)-c(j,:))'*p(i,j);      end     end         %更新w、beta    w=w-eta*delta_w/4;    beta=beta-eta*delta_beta/4;        %迭代终止的条件    if(abs(previous_E-E)<0.0001)       sn=sn+1;       if(sn==50)         break;        end     else       previous_E=E;       sn=0;      end       end       

实验的代码下载地址:https://github.com/Microstrong0305/Machine-Learning-ZhouZhiHua

阅读全文
0 0
原创粉丝点击