learnxyf.m
来自「有监督自组织映射-偏最小二乘算法(A supervised self-organ」· M 代码 · 共 67 行
M
67 行
function [NewXMap,NewYMap,WeightEvolution] = LearnXYF(Xtr,Ytr,XMap,YMap,MLKP);
if (MLKP.MaxIter<1)
NewXMap=XMap;
NewYMap=YMap;
WeightEvolution=0;
return
end
OldRadiusX=floor(realmax);
OldRadiusY=floor(realmax);
[Nobjects,NvarX] = size(Xtr);
[NvarY,Dummy]=size(YMap);
WeightValues = DetermineWeights(Ytr,MLKP);
[Alpha] = DetermineAlphaValues(MLKP);
Accept=0;
for iter=1:MLKP.MaxIter
% create neighbourhood and weights
[AlphaX,AlphaY,RadiusX,RadiusY,DecayFract] = AdaptLearnParams(iter,MLKP);
if (RadiusX < OldRadiusX)
[ActUnitsX, WeightsX] = MakeWinnerTable(RadiusX,MLKP);
OldRadiusX=RadiusX;
end
if (RadiusY < OldRadiusY)
[ActUnitsY, WeightsY] = MakeWinnerTable(RadiusY,MLKP);
OldRadiusY=RadiusY;
end
if (upper(MLKP.WeightDecay) == 'Y' | upper(MLKP.AddNoise) == 'Y')
[XMap] = WeightDecayAddNoise(XMap, DecayFract, MLKP);
[YMap] = WeightDecayAddNoise(YMap, DecayFract, MLKP);
end
if (upper(MLKP.FastUpdate) == 'Y' & RadiusX == MLKP.FastUpdateSize...
& RadiusY == MLKP.FastUpdateSize)
[NewXMap,NewYMap] = FastUpdateMapXY(Xtr,XMap,Ytr,YMap,MLKP,iter);
return;
end
% learn an epoch
OldXMap=XMap;
OldYMap=YMap;
perm=randperm(Nobjects);
for iobj=1:Nobjects
X=Xtr(perm(iobj),:);
Y=Ytr(perm(iobj),:);
[Value, Winner] = DetermineSimultaneousWinner(X,XMap,Y,YMap,MLKP,Alpha(iter));
if (Boltzmann(Value,iter,MLKP) == 'Y')
Accept=Accept+1;
AF = WeightValues(perm(iobj))*Value;
[NewXMap] = AdaptMap(X,XMap,Winner,AlphaX*AF,ActUnitsX,WeightsX);
[NewYMap] = AdaptMap(Y,YMap,Winner,AlphaY*AF,ActUnitsY,WeightsY);
XMap=NewXMap;
YMap=NewYMap;
end
end
WeightEvolution(1,iter) = sum(sum(abs(XMap-OldXMap)))/AlphaX;
WeightEvolution(2,iter) = sum(sum(abs(YMap-OldYMap)))/AlphaY;
if (iter > 1 & CheckConvergence(OldXMap, XMap, MLKP) == 'Y')
return;
end
end
if (upper(MLKP.BoltzmannMode) == 'THR' | upper(MLKP.BoltzmannMode) == 'EXP')
Message=sprintf('XYF: %d updates out of %d trials accepted by Boltzmann algorithm',...
Accept, MLKP.MaxIter*Nobjects);
disp(Message);
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?