learnskn.m

来自「有监督自组织映射-偏最小二乘算法(A supervised self-organ」· M 代码 · 共 46 行

M
46
字号
function [NewXMap,NewYMap,WeightEvolution] = LearnSKN(Xtr,Ytr,XMap,YMap,MLKP);

if(MLKP.MaxIter<1)
    NewXMap=XMap;
    NewYMap=YMap;
    WeightEvolution=0;
    return
end

OldRadiusX=floor(realmax);
[Nobjects,NvarX] = size(Xtr);
XYtr=[Xtr Ytr];
XYMap=[XMap; YMap];

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 (upper(MLKP.WeightDecay) == 'Y' | upper(MLKP.AddNoise) == 'Y')
        [XYMap] = WeightDecayAddNoise(XYMap, DecayFract, MLKP);
    end   
    if (upper(MLKP.FastUpdate) == 'Y' & RadiusX == MLKP.FastUpdateSize)
        [NewXMap] = FastUpdateMapX(Xtr,XMap,MLKP);
        return;
    end
    % learn an epoch
    OldXYMap=XYMap;
    perm=randperm(Nobjects);
    for iobj=1:Nobjects
        X=XYtr(perm(iobj),:);
        [Value, Winner] = DetermineWinner(X,XYMap,MLKP.DistTypeX,MLKP);
        [NewXYMap] = AdaptMap(X,XYMap,Winner,AlphaX,ActUnitsX,WeightsX); 
        XYMap=NewXYMap;
    end
    WeightEvolution(1,iter) = sum(sum(abs(XYMap-OldXYMap)))/AlphaX;
    if (iter > 1 & CheckConvergence(OldXYMap, XMap, MLKP) == 'Y')
        NewXMap=NewXYMap(1:NvarX,:);
        NewYMap=NewXYMap(NvarX+1:end,:);
        return;
    end
end
NewXMap=NewXYMap(1:NvarX,:);
NewYMap=NewXYMap(NvarX+1:end,:);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?