2015-07-28 6 views
2

Я выполнил свою функцию PCA в Matlab следующим образом:Почему разные результаты с PCA и SVD в Matlab?

function e = myPCA(X) 
[D, N] = size(X); 
m = mean(X, 2); 
X = X - repmat(m, 1, N); 
[e, ~, ~] = svd(X,'econ'); 
end 

Когда я использую теперь встроенную функцию Matlab [e, ~, ~] = pca(X'); Я получаю те же абсолютные значения, с моей функцией, но для некоторых столбцов U знак перевернут.

Какое из них является правильным способом и почему существует эта разница в знаке?

ответ

4

Это правда, что матрица, которую вы обозначаете e, имеет столбцы, которые являются основой, в которой матрица ковариации является диагональной, как это должно быть в PCA. Однако ортогональный базис остается ортогональным базисом, если вы переворачиваете любой базисный вектор. Например, в 2D, если база e вы найдете через Matlab's pca, это оси x и y, то -x и - y также является основой. Или указано несколько иначе, так как для pca вы найдете собственные векторы ковариационной матрицы, и так как если v является собственным вектором, то -v также является собственным вектором (с тем же собственным значением), мы видим, что основные компоненты определены с точностью до знака. Поскольку svd и pca реализованы по-разному, у вас нет гарантии получить одинаковые знаки.

+0

спасибо. Мне интересно получить все собственные значения и собственные векторы ковариационной матрицы. Если я использую метод Matlab pca, то собственные векторы являются столбцами в «e» из [e, ~, ~] = pca (X ') ;. Это правильно? Но как я могу получить собственные значения? – machinery

+0

У меня есть еще один момент: «Вычислить основные компоненты и собственные значения ковариационной/корреляционной матрицы». Являются ли главные компоненты равными собственным векторам? Должен ли я использовать в этом случае метод pca или метод SVD из Matlab или это не имеет значения? – machinery

+0

Да, собственные векторы являются главными компонентами. Неважно, какой метод вы используете, они математически эквивалентны. –