#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!