Анализ основных компонентов m-by-n матрицы реализации - PullRequest
2 голосов
/ 20 октября 2011

Кто-нибудь знает, как реализовать анализ основных компонентов (PCA) на матрице m-by-n в matlab для нормализации?

1 Ответ

4 голосов
/ 20 октября 2011

Предполагая, что каждый столбец является выборкой (то есть, у вас есть n выборок, каждая из которых имеет размер m), и он хранится в матрице A. Сначала вы должны вычесть значение столбца:

      Amm = bsxfun(@minus,A,mean(A,2));

затем вы хотите выполнить декомпозицию по собственным значениям на 1/size(Amm,2)*Amm*Amm' (вы можете использовать 1/(size(Amm,2)-1) в качестве масштабного коэффициента, если вы хотите интерпретацию в качестве несмещенной ковариационной матрицы) с:

      [v,d] = eig(1/size(Amm,2)*Amm*Amm');

И столбцы v будут вашими векторами PCA. Записи в d будут вашими соответствующими "отклонениями".

Однако, если ваш m огромен, тогда это не лучший способ, потому что хранение Amm*Amm' нецелесообразно. Вместо этого вы хотите вычислить:

      [u,s,v] = svd(1/sqrt(size(Amm,2))*Amm,'econ');

На этот раз u содержит ваши векторы PCA. Записи s связаны с записями d на sqrt.

Примечание: есть и другой способ, если m огромен, то есть вычисление eig(1/size(Amm,2)*Amm '*Amm); (обратите внимание на переключение транспозиций по сравнению с приведенным выше) и выполнение небольшой хитрости, но это более длинное объяснение, поэтому я не буду получать в него.

...