Как спроецировать новый вектор на пространство PCA?


21

После выполнения анализа главных компонентов (PCA) я хочу спроецировать новый вектор на пространство PCA (т.е. найти его координаты в системе координат PCA).

Я рассчитал PCA на языке R, используя prcomp. Теперь я должен быть в состоянии умножить свой вектор на матрицу вращения PCA. Должны ли главные компоненты в этой матрице быть расположены в строках или столбцах?

r  pca  r  variance  heteroscedasticity  misspecification  distributions  time-series  data-visualization  modeling  histogram  kolmogorov-smirnov  negative-binomial  likelihood-ratio  econometrics  panel-data  categorical-data  scales  survey  distributions  pdf  histogram  correlation  algorithms  r  gpu  parallel-computing  approximation  mean  median  references  sample-size  normality-assumption  central-limit-theorem  rule-of-thumb  confidence-interval  estimation  mixed-model  psychometrics  random-effects-model  hypothesis-testing  sample-size  dataset  large-data  regression  standard-deviation  variance  approximation  hypothesis-testing  variance  central-limit-theorem  kernel-trick  kernel-smoothing  error  sampling  hypothesis-testing  normality-assumption  philosophical  confidence-interval  modeling  model-selection  experiment-design  hypothesis-testing  statistical-significance  power  asymptotics  information-retrieval  anova  multiple-comparisons  ancova  classification  clustering  factor-analysis  psychometrics  r  sampling  expectation-maximization  markov-process  r  data-visualization  correlation  regression  statistical-significance  degrees-of-freedom  experiment-design  r  regression  curve-fitting  change-point  loess  machine-learning  classification  self-study  monte-carlo  markov-process  references  mathematical-statistics  data-visualization  python  cart  boosting  regression  classification  robust  cart  survey  binomial  psychometrics  likert  psychology  asymptotics  multinomial 

Ответы:


23

Ну, @Srikant уже дал вам правильный ответ, поскольку матрица вращения (или загрузки) содержит собственные векторы, расположенные по столбцам, так что вам просто нужно умножить (используя %*%) ваш вектор или матрицу новых данных, например, на prcomp(X)$rotation. Однако будьте осторожны с любыми дополнительными параметрами центрирования или масштабирования, которые были применены при вычислении EV PCA.

В R вы также можете найти полезную predict()функцию, см ?predict.prcomp. Кстати, вы можете проверить, как осуществляется проекция новых данных, просто введя:

getS3method("predict", "prcomp")

24

Просто чтобы добавить к фантастическому ответу @ chl (+1), вы можете использовать более легкое решение:

# perform principal components analysis
pca <- prcomp(data) 

# project new data onto the PCA space
scale(newdata, pca$center, pca$scale) %*% pca$rotation 

Это очень полезно, если вы не хотите сохранять весь pcaобъект для проецирования newdataна пространство PCA.


5

В SVD, если A является матрицей mxn, верхние k строк правой сингулярной матрицы V являются k-размерным представлением исходных столбцов A, где k <= n

A = UΣV t
=> A t = VΣ t U t = VΣU t
=> A t U = VΣU t U = VΣ ----------- (поскольку U ортогонально)
=> A t- 1 = VΣΣ -1 = V

Итак, -1Взнак равноATUΣ

Строки A t или столбцы A отображаются на столбцы V.
Если матрица новых данных, для которых необходимо выполнить PCA для уменьшения размера, равна Q, матрица aqxn, то используйте формулу для вычисления - 1 , результат R является желаемым результатом. R является матрицей n на n, а верхние k строк R (можно рассматривать как матрицу ak на n) являются новым представлением столбцов Q в пространстве k-размерности.рзнак равноQTUΣ


2

Я считаю, что собственные векторы (т.е. главные компоненты) должны быть расположены в виде столбцов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.