function RBF_NN_Example()
clc
clear all
% 创建训练样本
% 线性函数的训练
Mn_Train=100*[rand(1,5) rand(1,5)+0.5 rand(1,5)+1 rand(1,5)+1.5;...
rand(1,5) rand(1,5)+0.5 rand(1,5)+1 rand(1,5)+1.5];
n=size(Mn_Train,2);
% Mn_Train 为2*20的矩阵
Nn_Train=[2*Mn_Train;3*Mn_Train(1,:)];
% Nn_Train 为3*20的矩阵
% 将训练样本进行聚类分析,分为4类
H=4;
% 将样本归一化
[SampleX,pmin,pmax,SampleY,tmin,tmax]=premnmx(Mn_Train,Nn_Train);
% 将训练样本进行聚类并形成聚类中心
options=statset('Display','final');
[index,center]=kmeans(SampleX',H,'Distance','city',...
'Replicates',10,'Options',options);
figure(1)
X=SampleX';
set(figure(1),'color','w')
hold on
plot(X(index==1,1),X(index==1,2),'ro','markersize',9,'markeredgecolor',...
'k','markerfacecolor','r')
plot(X(index==2,1),X(index==2,2),'go','markersize',9,'markeredgecolor',...
'k','markerfacecolor','g')
plot(X(index==3,1),X(index==3,2),'mo','markersize',9,'markeredgecolor',...
'k','markerfacecolor','m')
plot(X(index==4,1),X(index==4,2),'bo','markersize',9,'markeredgecolor',...
'k','markerfacecolor','b')
plot(center(:,1),center(:,2),'ko','markersize',15,'markeredgecolor',...
'k','markerfacecolor','k')
title('样本聚类','fontsize',16)
grid on
hold off
% spread径函数的扩展速度设置
spread=0.3;
% 基于高斯函数的隐藏层神经元的输出
% 形成4*20的矩阵
% 阈值
b=ones(1,H)*0.8326/spread;
center=center';
Hidden_Out=zeros(H,size(SampleX,2));
for i=1:H
for j=1:size(SampleX,2)
Hidden_Out(i,j)=exp(-b(i)*(norm(SampleX(:,j)-center(:,i)).^2));
end
end
% 对输出层权重的训练,最速下降法
MaxIteration=1000;
Iteration=0;
tol=1e-3;
lemda=0.001;
% 初始化参数和阈值
N=size(SampleY,1);
W=0.5*rand(N,H)-0.1;
B=0.5*rand(N,1)-0.1;
% 网络输出值
NetOut=W*Hidden_Out+repmat(B,1,n);
Resid=SampleY-NetOut;
% 均方误
MSE_error=sumsqr(Resid)./(N*n);
% 训练权重开始
while Iteration
NetOut=W*Hidden_Out+repmat(B,1,n);
Resid=SampleY-NetOut;
MSE_error=sumsqr(Resid)./(N*n);
Delta=Resid;
% 最速下降训练
dW=Delta*Hidden_Out';
dB=Delta*ones(n,1);
W=W+lemda*dW;
B=B+lemda*dB;
if MSE_error
break;
end
Iteration=Iteration+1;
end
NetOut=W*Hidden_Out+repmat(B,1,n);
Samplefit=postmnmx(NetOut,tmin,tmax);
% 将拟合样本和原样本比较
figure(2)
set(figure(2),'color','w')
hold on
subplot(3,1,1)
hold on
plot(1:20,Nn_Train(1,:),'ro-','markersize',8)
plot(1:20,Samplefit(1,:),'bo-','markersize',8)
title('样本拟合对比')
subplot(3,1,2)
hold on
plot(1:20,Nn_Train(2,:),'ro-','markersize',8)
plot(1:20,Samplefit(2,:),'bo-','markersize',8)
title('样本拟合对比')
subplot(3,1,3)
hold on
plot(1:20,Nn_Train(3,:),'ro-','markersize',8)
plot(1:20,Samplefit(3,:),'bo-','markersize',8)
title('样本拟合对比')
hold off