⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sommap.m

📁 这是一个用matlab写的SOM算法程序,效果不错
💻 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 + -