El análisis de componentes principales (PCA) se puede utilizar para reducir la dimensionalidad. Después de realizar tal reducción de dimensionalidad, ¿cómo se puede reconstruir aproximadamente las variables / características originales a partir de un pequeño número de componentes principales?
Alternativamente, ¿cómo se pueden eliminar o descartar varios componentes principales de los datos?
En otras palabras, ¿cómo revertir la PCA?
Dado que PCA está estrechamente relacionado con la descomposición de valores singulares (SVD), la misma pregunta se puede hacer de la siguiente manera: ¿cómo revertir SVD?
pca
dimensionality-reduction
svd
ameba
fuente
fuente
Respuestas:
PCA calcula los vectores propios de la matriz de covarianza ("ejes principales") y los ordena por sus valores propios (cantidad de varianza explicada). Los datos centrados se pueden proyectar sobre estos ejes principales para obtener componentes principales ("puntajes"). A los fines de la reducción de la dimensionalidad, se puede mantener solo un subconjunto de componentes principales y descartar el resto. (Vea aquí la introducción de un laico a PCA ).
Sea la matriz de datos con filas (puntos de datos) y columnas (variables o características). Después de restar la media del vector de cada fila, obtenemos el centrado matriz de datos . Sea la matriz de algunos vectores propios que queremos usar; estos serían con mayor frecuencia los vectores propios con los valores propios más grandes. Entonces la matriz de las proyecciones de PCA ("puntajes") estará dada simplemente por . n×pnpXraw n×p n p μ X V p×k k k n×k Z=XV
Esto se ilustra en la figura a continuación: la primera subtrama muestra algunos datos centrados (los mismos datos que uso en mis animaciones en el hilo vinculado) y sus proyecciones en el primer eje principal. La segunda subtrama muestra solo los valores de esta proyección; la dimensionalidad se ha reducido de dos a uno:
Para poder reconstruir las dos variables originales a partir de este componente principal, podemos volver a a dimensiones con . De hecho, los valores de cada PC deben colocarse en el mismo vector que se usó para la proyección; compare las subparcelas 1 y 3. El resultado viene dado por . Lo estoy mostrando en la tercera subtrama anterior. Para obtener la reconstrucción final , necesitamos agregar el vector medio a eso:p V⊤ X^=ZV⊤=XVV⊤ X^raw μ
Tenga en cuenta que uno puede ir directamente desde la primera subtrama a la tercera multiplicando con la matriz ; Se llama matriz de proyección . Si todos los se utilizan vectores propios, entonces es la matriz de identidad (no se realiza ninguna reducción de dimensionalidad, por lo tanto "reconstrucción" es perfecto). Si solo se usa un subconjunto de vectores propios, no es identidad.X VV⊤ p VV⊤
Esto funciona para un punto arbitrario en el espacio de la PC; se puede asignar al espacio original a través de .z x^=zV⊤
Descartar (eliminar) PC líderes
A veces, uno desea descartar (eliminar) una o algunas de las PC principales y conservar el resto, en lugar de conservar las PC principales y descartar el resto (como se indicó anteriormente). En este caso, todas las fórmulas permanecen exactamente iguales , pero debe constar de todos los ejes principales, excepto los que se desean descartar. En otras palabras, siempre debe incluir todas las PC que uno quiera conservar.V V
Advertencia sobre PCA sobre correlación
Cuando PCA se realiza en la matriz de correlación (y no en la matriz de covarianza), los datos sin procesar no solo se centran restando sino que también se escalan dividiendo cada columna por su desviación estándar . En este caso, para reconstruir los datos originales, es necesario volver a escalar las columnas de con y solo entonces volver a agregar el vector medio .Xraw μ σi X^ σi μ
Ejemplo de procesamiento de imagen
Este tema a menudo surge en el contexto del procesamiento de imágenes. Considere a Lenna , una de las imágenes estándar en la literatura de procesamiento de imágenes (siga los enlaces para encontrar de dónde proviene). A continuación, a la izquierda, muestro la variante en escala de grises de esta imagen (archivo disponible aquí ).512×512
Podemos tratar esta imagen en escala de grises como una matriz de datos . Realizo PCA en él y calculo usando los primeros 50 componentes principales. El resultado se muestra a la derecha.512×512 Xraw X^raw
Revertir SVD
PCA está muy relacionado con la descomposición de valores singulares (SVD), ver Relación entre SVD y PCA. ¿Cómo usar SVD para realizar PCA? para más detalles. Si una matriz se edita SVD como y se selecciona un vector -dimensional que representa el punto en el espacio "reducido" de dimensiones, luego para volver a en dimensiones uno necesita multiplicarlo con .n×p X X=USV⊤ k z U k p S⊤1:k,1:kV⊤:,1:k
Ejemplos en R, Matlab, Python y Stata
Realizaré PCA en los datos de Fisher Iris y luego lo reconstruiré utilizando los dos primeros componentes principales. Estoy haciendo PCA en la matriz de covarianza, no en la matriz de correlación, es decir, no estoy escalando las variables aquí. Pero todavía tengo que agregar la media de nuevo. Algunos paquetes, como Stata, se encargan de eso a través de la sintaxis estándar. Gracias a @StasK y @Kodiologist por su ayuda con el código.
Verificaremos la reconstrucción del primer punto de datos, que es:
Matlab
Salida:
R
Salida:
Para el ejemplo R resuelto de la reconstrucción de imágenes por PCA, consulte también esta respuesta .
Pitón
Salida:
Tenga en cuenta que esto difiere ligeramente de los resultados en otros idiomas. Esto se debe a que la versión de Python del conjunto de datos de Iris contiene errores .
Stata
fuente
nComp