ECG-Kit 1.0
(1,714 bytes)
% [X,centering,scaling] = pls_prepro(X,centering,scaling, flag)
function [X,centering,scaling] = pls_prepro(X,centering,scaling, flag)
% Copyright: S.Verzakov, serguei@ph.tn.tudelft.nl
% Faculty of Applied Sciences, Delft University of Technology
% P.O. Box 5046, 2600 GA Delft, The Netherlands
if nargin<4
flag = 1;
end
[N,d] = size(X);
centering = centering(:).';
scaling = scaling(:).';
if flag >= 0
if length(centering) == 1
if isnan(centering)
centering = mean(X,1);
X = X - repmat(centering, [N,1]);
else
X = X - centering;
end
elseif length(centering) == d
idx = find(isnan(centering));
centering(idx) = mean(X(:,idx),1);
X = X - repmat(centering, [N,1]);
end
if length(scaling) == 1
if isnan(scaling)
scaling = std(X,0,1);
idx0 = find(scaling == 0);
scaling(idx0) = 1;
warning(['features ' num2str(idx(:)) ' have std = 0 and are not scaled']);
X = X ./ repmat(scaling, [N,1]);
else
X = X / scaling;
end
elseif length(scaling) == d
idx = find(isnan(scaling));
scaling(idx) = std(X(:,idx),0,1);
idx0 = find(scaling(idx) == 0);
scaling(idx(idx0)) = 1;
warning(['features ' num2str(idx(idx0(:))) ' have std = 0 and are not scaled']);
X = X ./ repmat(scaling, [N,1]);
end
else
if length(centering) > 0 & all(~isnan(centering))
if length(centering) == 1
X = X + centering;
elseif length(centering) == d
X = X + repmat(centering, [N,1]);
end
end
if length(scaling) > 0 & all(~isnan(scaling))
if length(scaling) == 1
X = X * scaling;
elseif length(scaling) == d
X = X .* repmat(scaling, [N,1]);
end
end
end
return