?? sommap.m
字號:
function somMap(eta0,var0,itera)
eta0=0.02;
var0=4;
itera=100;
weight=zeros(25,2);
T2=1000;
T1=1000/log(var0);
for i=1:25
for j=1:2
weight(i,j)=0;
end;
end;
P=load('data.txt');
num=length(P);
net = newsom([0 2; 0 1],[5 5]);
%D=distance(25);
D=net.layers{1}.distances;
%D=D';
for it=1:itera
temp=zeros(1,25);
for i=1:num
%取得一個訓(xùn)練樣例
x=P(i,:);
for m=1:25
for n=1:2
result(n)=x(n)-weight(m,n);
end;
temp(m)=norm(result);
end;
[maxT,ix]=min(temp);
ixm=ceil(ix/5);
ixn=ix-(ixm-1)*5;
varN=var0*exp(-(i-1)/T1);
etaN=eta0*exp(-(i-1)/T2);
dJIX=D(ix,:);
if it<=itera/2
for m=1:25
if dJIX(m)<=2
dJIX(m)=0;
end;
end;
else
for m=1:25
if dJIX(m)<=1
dJIX(m)=0;
end;
end;
end;
for m=1:25
dJIX(m)=dJIX(m)*dJIX(m);
end;
hJIxN=exp(-dJIX/(2*varN*varN));
for m=1:25
if hJIxN(m)<0.9
hJIxN(m)=0;
end;
weight(m,:)=weight(m,:)+hJIxN(m)*etaN*(x-weight(m,:));
end;
end;
end;
P=P';
figure
plot(P(1,:),P(2,:),'.b','markersize',5);
hold on;
plotsom(weight,D);
hold off;
function d=distance(l)
d=zeros(25,25);
pos=zeros(25,2);
for i=1:5
for j=1:5
pos((i-1)*5+j,:)=[i,j];
end;
end;
for i=1:25
temp=pos(i,:);
for j=1:25
other=pos(j,:);
d(i,j)=max(abs(temp-other));
end;
end;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -