dswfast.m
来自「有监督自组织映射-偏最小二乘算法(A supervised self-organ」· M 代码 · 共 61 行
M
61 行
function [ValueX, ValueY, PosX, PosY] = DSWFast(X,XMap,Y,YMap,MLKP,Alpha);
DistTypeX=upper(MLKP.DistTypeX);
if (DistTypeX == 'COR')
% maximum of scaled inner products
CorrValuesX = CalcCorrValues(X,XMap);
DistanceX = ones(1,MLKP.Nunits) - CorrValuesX;
elseif (DistTypeX == 'WCC')
CorrValuesX=WccValues(X,XMap,MLKP);
DistanceX = ones(1,MLKP.Nunits) - CorrValuesX;
else
% minimum of Euclidean distances, absolute values or Tanimoto distances
if (DistTypeX == 'EUC')
DistanceX = dist(X,XMap);
elseif (DistTypeX == 'ABS')
DistanceX = sum(abs(XMap-(ones(MLKP.Nunits,1)*X)'));
elseif (DistTypeX == 'WDD')
DistanceX = WddValues(X,XMap,MLKP);
else
DistanceX = TanimotoDistance(X,XMap,MLKP);
end
DistanceX = DistanceX/max(DistanceX);
end
DistTypeY=upper(MLKP.DistTypeY);
if (DistTypeY== 'COR')
% maximum of scaled inner products
CorrValuesY = CalcCorrValues(Y,YMap);
DistanceY = ones(1,MLKP.Nunits) - CorrValuesY;
elseif (DistTypeY == 'WCC')
CorrValuesY=WccValues(Y,YMap,MLKP);
DistanceY = ones(1,MLKP.Nunits) - CorrValuesY;
else
% minimum of Euclidean distances, absolute values or Tanimoto distances
if (DistTypeY == 'EUC')
DistanceY = dist(Y,YMap);
elseif (DistTypeY == 'ABS')
DistanceY = sum(abs(YMap-(ones(MLKP.Nunits,1)*Y)'));
elseif (DistTypeY == 'WDD')
DistanceY = WddValues(Y,YMap,MLKP);
else
DistanceY = TanimotoDistance(Y,YMap,MLKP);
end
MaxY=max(DistanceY);
if MaxY > 0
DistanceY = DistanceY/MaxY;
end
end
% determine simultaneous winner
[ValueXS, PosX] = min(Alpha*DistanceY+(1-Alpha)*DistanceX);
[ValueYS, PosY] = min(Alpha*DistanceX+(1-Alpha)*DistanceY);
% if necessary, calculate normalised inner-product for weighting
if (upper(MLKP.AdaptLearn) == 'Y' | upper(MLKP.BoltzmannMode) ~= 'NOT')
ValueX = 2 - ValueYS;
ValueY = 2 - ValueXS;
else
ValueX = 1;
ValueY = 1;
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?