Например имам 9 променливи и 362 случая. Направих PCA изчисление и установих, че първите 3 PCA координати са ми достатъчни.
Сега имам нова точка в моята 9-измерна структура и искам да я проектирам към системната координата на главния компонент. Как да получа новите му координати?
%# here is data (362x9)
load SomeData
[W, Y] = pca(data, 'VariableWeights', 'variance', 'Centered', true);
%# orthonormal coefficient matrix
W = diag(std(data))\W;
% Getting mean and weights of data (for future data)
[data, mu, sigma] = zscore(data);
sigma(sigma==0) = 1;
%# New point in original 9dim system
%# For example, it is the first point of our input data
x = data(1,:);
x = bsxfun(@minus,x, mu);
x = bsxfun(@rdivide, x, sigma);
%# New coordinates as principal components
y0 = Y(1,:); %# point we should get in result
y = (W*x')'; %# our result
%# error
sum(abs(y0 - y)) %# 142 => they are not the same point
%# plot
figure()
plot(y0,'g'); hold on;
plot(y,'r');
Как да получа координати на нова точка, проектирана към нова основа на главния компонент?
pca()
? Обикновено в matlab използвамprincomp()
. - person Isaac   schedule 09.11.2012Y(1,:)
иy
в една и съща посока ли са? - person Isaac   schedule 09.11.2012princomp()
се насочва къмpca()
. Добре, ще пробвам в по-стари версии, още повече, че ми трябва да работи в стария Matlab - person Larry Cinnabar   schedule 09.11.2012Y(1,:)
, иy
са1x9
. - person Larry Cinnabar   schedule 09.11.2012Y(1,:)
приблизително кратно ли е наy
? - person Isaac   schedule 09.11.2012