필터 지우기
필터 지우기

Self-Organized Map Gaussian Neighborhood Function

조회 수: 5 (최근 30일)
Tyler Smith
Tyler Smith 2019년 8월 7일
I typically use linkdist when running a SOM in MATLAB, however, the research shows that a Gaussian neighborhood function may often be the better choice. Does anyone know how to implement a Gaussian neighborhood function rather than using a built-in function? I've attached the function I use to run a SOM.
function [classescol,means,SOMx,PCAx] = bsompca(data,Hdim,Vdim,O_Lrate,T_Lrate,topology,distfunc,Zoption,retainpc,varargin)
clear net
olrate=O_Lrate;
tlrate=T_Lrate;
somrows=Hdim;
somcols=Vdim;
alldata=data;
topo=topology;
distfunction=distfunc;
retain=retainpc;
opt=Zoption;
[ostepsx,datacols]=size(alldata);
if olrate<=tlrate
warning('O_Lrate should be greater than T_Lrate. Proceeding nonetheless...');
end
if nargin==9
iterations=min(ostepsx*2,10000);
osteps=round(iterations/2);
else
iterations=varargin{1};
osteps=round(iterations/2);
end
if strcmp(retain,'none')==1;
PCAx{1,1}='No PCA completed';
x = double(transpose(alldata));
warning('to make sense of Sammon map, do subsequent PCA and use plotgrid3d function to map mean PC score by classescol');
else
if opt==1
[loadings,score,latent,~,expl] = pca(zscore(alldata));
else
[loadings,score,latent,~,expl] = pca(alldata);
end
if retain==1
eigen=latent>1;
retainPCnum=sum(eigen);
retainpcs=score(:,1:retainPCnum);
explvar=sum(expl(1:retainPCnum));
x = double(transpose(retainpcs));
elseif retain==0
retainPCnum=datacols;
retainpcs=score;
explvar=sum(expl(1:retainPCnum));
x = double(transpose(score));
elseif retain>0 && retain<1
retainPCnum=sum(cumsum(expl)<retain*100);
retainpcs=score(:,1:retainPCnum);
explvar=sum(expl(1:retainPCnum));
x = double(transpose(retainpcs));
else
error('retainpc was entered incorrectly')
end
PCAx{1,1}='explvar Retained';
PCAx{2,1}='retainPCnum';
PCAx{3,1}='retainpcs';
PCAx{4,1}='eigenvalues';
PCAx{5,1}='Explaind Var all';
PCAx{6,1}='Loadings';
PCAx{1,2}=explvar;
PCAx{2,2}=retainPCnum;
PCAx{3,2}=retainpcs;
PCAx{4,2}=latent;
PCAx{5,2}=expl;
PCAx{6,2}=loadings;
end
%% BEGIN SOMMing
net=selforgmap([somrows somcols],osteps,1,topo,distfunction);
net.layerWeights{1,1}.learnParam.order_lr = olrate;
net.layerWeights{1,1}.learnParam.tune_lr = tlrate;
net.trainParam.epochs = iterations;
[net2,tr] = train(net,x);
y = net2(x);
classes = vec2ind(y);
classescol=transpose(classes);
means=grpstats(alldata,classescol);
plotsompos(net2);
plotsomhits(net2,x);
somweights=net2.IW{1,1};
CPdist=dist(transpose(somweights));
DailyDist=transpose(dist(somweights,x));
posx = eval(['@' topo]);
pos=posx(somrows,somcols);
ITz=eval(['@' distfunction]);
distall=ITz(pos);
initdist=max(distall(:));
SOMx{1,1}='SOM neural network';
SOMx{2,1}='tr';
SOMx{3,1}='somweights';
SOMx{4,1}='CPdist';
SOMx{5,1}='DailyDist';
SOMx{6,1}='Settings';
SOMx{7,1}='initdist';
Settings{1,1}='Dimensions';
Settings{2,1}='O_Lrate';
Settings{3,1}='T_Lrate';
Settings{4,1}='topology';
Settings{5,1}='distfunc';
Settings{6,1}='iterations';
Settings{7,1}='PCA Settings for retain';
Settings{1,2}=[Hdim,Vdim];
Settings{2,2}=O_Lrate;
Settings{3,2}=T_Lrate;
Settings{4,2}=topology;
Settings{5,2}=distfunction;
Settings{6,2}=iterations;
Settings{7,2}=retain;
SOMx{1,2}=net2;
SOMx{2,2}=tr;
SOMx{3,2}=somweights;
SOMx{4,2}=CPdist;
SOMx{5,2}=DailyDist;
SOMx{6,2}=Settings;
SOMx{7,2}=initdist;
end

답변 (0개)

카테고리

Help CenterFile Exchange에서 Pattern Recognition and Classification에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by