天气: 晴朗
心情: 高兴
samnum=100;
testsamnum=101;
indim=1;
clusternum=10;
overlap=1.0;
rand('state',sum(100*clock))
noisevar=0.1;
noise=noisevar*randn(1,samnum);
samin=8*rand(1,samnum)-4;
samoutnonoise=1.1*(1-samin+2*samin.^2).*exp(-samin.^2/2);
samout=samoutnonoise+noise;
testsamin=-4:0.08:4;
testsamout=1.1*(1-testsamin+2*testsamin.^2).*exp(-testsamin.^2/2);
figure
hold on
grid
plot(samin,samout,'r+')
plot(testsamin,testsamout,'r--')
xlabel('input x');
ylabel('output y');
centers=samin(:,1:clusternum);
numberinclusters=zeros(clusternum,1);
indexclusters=zeros(clusternum,samnum);
while 1,
numberinclusters=zeros(clusternum,1);
indexclusters=zeros(clusternum,samnum);
for i=1:samnum
alldistance=dist(centers',samin(:,i));
[mindist,pos]=min(alldistance);
numberinclusters(pos)=numberinclusters(pos)+1;
indexinclusters(pos,numberinclusters(pos))=i;
end
oldcenters=centers;
for i=1:clusternum
index=indexinclusters(i,1:numberinclusters(i));
centers(:,i)=mean(samin(:,index)')';
end
equalnum=sum(sum(centers==oldcenters));
if equalnum==indim*clusternum,
break,
end
end
alldistances=dist(centers',centers);
maximum=max(max(alldistances));
for i=1:clusternum
alldistances(i,i)=maximum+1;
end
spreads=overlap*min(alldistances)';
distance=dist(centers',samin);
spreadsmat=repmat(spreads,1,samnum);
hiddenunitout=radbas(distance./spreadsmat);
hiddenunitoutex=[hiddenunitout' ones(samnum,1)]';
w2ex=samout*pinv(hiddenunitoutex);
w2=w2ex(:,1:clusternum);
b2=w2ex(:,clusternum+1);
testdistance=dist(centers',testsamin);
testspreadsmat=repmat(spreads,1,testsamnum);
testhiddenunitout=radbas(testdistance./testspreadsmat);
testnnout=w2*testhiddenunitout+b2;
plot(testsamin,testnnout,'r-')
w2
b2