Уменьшение размерности PCA

Я пытаюсь выполнить PCA, уменьшая 900 измерений до 10. Пока у меня есть:

covariancex = cov(labels);
[V, d] = eigs(covariancex, 40);

pcatrain = (trainingData - repmat(mean(traingData), 699, 1)) * V;
pcatest = (test - repmat(mean(trainingData), 225, 1)) * V;

Где labels - это 1x699 метки для символов (1-26). trainingData это 699x900, 900-мерные данные для изображений из 699 символов. test это 225x900, 225 900-мерных символов.

В основном я хочу уменьшить это до 225x10, то есть 10 измерений, но я как бы застрял на этом этапе.


person user3094936    schedule 12.12.2013    source источник


Ответы (2)


Предполагается, что ковариация реализована в вашем trainingData:

X = bsxfun(@minus, trainingData, mean(trainingData,1));           
covariancex = (X'*X)./(size(X,1)-1);                 

[V D] = eigs(covariancex, 10);   % reduce to 10 dimension

Xtest = bsxfun(@minus, test, mean(trainingData,1));  
pcatest = Xtest*V;
person lennon310    schedule 12.12.2013
comment
Извините, только еще один момент, я помню, почему я изначально использовал 40 (хотя мне не нужно столько), потому что, по словам моего лектора, лучше брать размеры 2:11, а не 1:10, как мне этого добиться? - person user3094936; 12.12.2013
comment
[V D]=eigs(covariancex,11); pcatest=Xtest*V(:,2:11); - person lennon310; 12.12.2013

Из вашего кода кажется, что вы принимаете ковариацию labels, а не trainingData. Я считаю, что смысл PCA заключается в определении наибольшей дисперсии в некотором количестве N (здесь N = 10) подпространств ваших данных.

Ваша ковариационная матрица должна быть 900x900 (если 900 - это размер каждого изображения, я предполагаю, что это результат наличия изображений размером 30x30 пикселей). ковариация между пикселем i и пикселем j. Это должна быть диагональная матрица как [i,j] == [j,i].

Кроме того, при вызове eigs(covariancex,N) N должно быть равно 10 вместо 40, если вы хотите уменьшить размерность до 10.

person Falimond    schedule 12.12.2013
comment
Извините, я помню, почему я изначально использовал 40 (хотя мне столько не нужно), потому что, по словам моего лектора, лучше брать размеры 2:11, а не 1:10, как мне этого добиться? - person user3094936; 12.12.2013