fastupdatemapxy.m
来自「有监督自组织映射-偏最小二乘算法(A supervised self-organ」· M 代码 · 共 53 行
M
53 行
function [NewXMap,NewYMap] = FastUpdateMapXY(Xtr,XMap,Ytr,YMap,MLKP,iter);
[NvarX,Nunit]=size(XMap);
[NvarY,Nunit]=size(YMap);
[Nobjects,Dummy] = size(Xtr);
ZeroXMap=zeros(NvarX,Nunit);
ZeroYMap=zeros(NvarY,Nunit);
ZeroCount=zeros(Nunit,1);
Tstart=cputime;
[Alpha] = DetermineAlphaValues(MLKP);
disp('Entering fast map update mode');
ContinueUpdate='Y';
Iteration=0;
while (ContinueUpdate == 'Y')
Iteration=Iteration+1;
OldXMap=XMap;
OldYMap=YMap;
NewXMap=ZeroXMap;
NewYMap=ZeroYMap;
Count=ZeroCount;
for iobj=1:Nobjects
X=Xtr(iobj,:);
Y=Ytr(iobj,:);
if (MLKP.TrainingMethod == 'MLK' | MLKP.TrainingMethod =='CPN')
[Value, Winner] = DetermineWinner(X,XMap,MLKP.DistTypeX,MLKP);
else
[Value, Winner] = DetermineSimultaneousWinner(X,XMap,Y,YMap,MLKP,Alpha(iter));
end
NewXMap(:,Winner)= NewXMap(:,Winner)+X';
NewYMap(:,Winner)= NewYMap(:,Winner)+Y';
Count(Winner) = Count(Winner)+1;
end
for iunit=1:Nunit
if (Count(iunit) > 0)
NewXMap(:,iunit)=NewXMap(:,iunit)/Count(iunit);
NewYMap(:,iunit)=NewYMap(:,iunit)/Count(iunit);
else
NewXMap(:,iunit)=XMap(:,iunit);
NewYMap(:,iunit)=YMap(:,iunit);
end
end
if ((sum(sum(NewXMap-OldXMap))+sum(sum(NewYMap-OldYMap))) == 0)
Message=sprintf('Fast map update converged after %d iterations in %g seconds',...
Iteration,cputime-Tstart);
disp(Message);
ContinueUpdate ='N';
else
XMap=NewXMap;
YMap=NewYMap;
end
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?