Як спроектувати новий вектор на простір 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. Однак будьте обережні з будь-якими додатковими параметрами центрування або масштабування, які застосовувалися під час обчислення PCA EV.

У 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

Отже -1V=АтUΣ

Рядки A t або стовпці A відображають у стовпці V.
Якщо матриця нових даних, на яких слід виконати PCA для зменшення розміру, є Q, aqxn матриця, то використовуйте формулу для обчислення - 1 , результат R - бажаний результат. R - матриця n на n, а верхні k рядки k R (можна розглядати як ak за n матрицею) - це нове подання стовпців Q у просторі k-виміру.R=QтUΣ


2

Я вважаю, що власні вектори (тобто основні компоненти) повинні бути розташовані як стовпці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.