¿Cómo proyectar un nuevo vector en el espacio PCA?


21

Después de realizar el análisis de componentes principales (PCA), quiero proyectar un nuevo vector en el espacio PCA (es decir, encontrar sus coordenadas en el sistema de coordenadas PCA).

He calculado PCA en lenguaje R usando prcomp. Ahora debería poder multiplicar mi vector por la matriz de rotación PCA. ¿Deben los componentes principales de esta matriz estar dispuestos en filas o columnas?

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 

Respuestas:


23

Bueno, @Srikant ya le dio la respuesta correcta ya que la matriz de rotación (o cargas) contiene vectores propios dispuestos en columnas, por lo que solo tiene que multiplicar (usando %*%) su vector o matriz de datos nuevos con, por ejemplo prcomp(X)$rotation. Sin embargo, tenga cuidado con los parámetros adicionales de centrado o escala que se aplicaron al calcular los EV de PCA.

En R, también puede encontrar útil la predict()función, vea ?predict.prcomp. Por cierto, puede verificar cómo se implementa la proyección de nuevos datos simplemente ingresando:

getS3method("predict", "prcomp")

24

Solo para agregar a la fantástica respuesta de @ chl (+1), puede usar una solución más liviana:

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

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

Esto es muy útil si no desea guardar todo el pcaobjeto para proyectarlo newdataen el espacio PCA.


5

En SVD, si A es una matriz mxn, las k filas superiores de la matriz singular derecha V, es una representación de dimensión k de las columnas originales de A donde k <= n

A = UΣV t
=> A t = VΣ t U t = VΣU t
=> A t U = VΣU t U = VΣ ----------- (porque U es ortogonal)
=> A t- 1 = VΣΣ -1 = V

Entonces -1V=UNtUΣ

Las filas de A t o las columnas de A se asignan a las columnas de V.
Si la matriz de los nuevos datos sobre los que se realiza PCA para la reducción de dimensiones es Q, matriz aqxn, entonces use la fórmula para calcular - 1 , el resultado R es el resultado deseado. R es una matriz de n por n, y las k filas superiores de R (puede verse como una matriz de k por n) es una nueva representación de las columnas de Q en el espacio de dimensión k.R=QtUΣ


2

Creo que los vectores propios (es decir, los componentes principales) deben organizarse como columnas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.