📄 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=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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -