Анализ основных компонентов реализация матрицы m-by-n

#algorithm #matlab #normalization #pca

#алгоритм #matlab #нормализация #pca

Вопрос:

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

Ответ №1:

Предполагая, что каждый столбец является образцом (то есть у вас есть 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 через a sqrt .

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

Комментарии:

1. Блестящая разбивка и пояснения 1!