![[2021] PCA y SVD explicados con numpy {DH} 1](https://www.nidocreativo.es/wp-content/uploads/2022/06/1hvzGsXgQBQ4cnnxJPPuVdg.png)
16 de marzo de 2019·6 minutos de lectura
¿Cómo se relacionan exactamente el análisis de componentes principales y la descomposición de valores singulares y cómo se implementan con numpy?
El análisis de componentes principales (PCA) y el análisis de valores singulares (SVD) son comunesnorteUsó enfoques de reducción de dimensionalidad en el análisis exploratorio de datos (EDA) y el aprendizaje automático. Ambos son métodos clásicos de reducción de dimensionalidad lineal que intentan encontrar combinaciones lineales de características en la matriz de datos de alta dimensión original para crear una representación significativa del conjunto de datos. Se ven favorecidos por varios campos cuando se trata de reducir la dimensionalidad: los PCA son ampliamente utilizados por los biólogos para analizar y visualizar variaciones de fuentes en conjuntos de datos de genética de poblaciones, transcriptómica, proteómica y microbioma. Mientras tanto, SVD, especialmente su versión reducida, SVD truncada, es más popular en el campo del procesamiento del lenguaje natural para lograr la representación de matrices de frecuencia de palabras gigantescas y escasas.
Uno puede notar que los gráficos PCA y SVD resultantes son similares para algunos datos. De hecho, PCA y SVD están estrechamente relacionados. En esta publicación, usaré algo de álgebra lineal y algunas líneas de código numérico para ilustrar su relación.
Primero, repasemos rápidamente algunos conceptos básicos de álgebra lineal, ya que tanto PCA como SVD implican cierta descomposición de matrices.
- Transposición de matriz: Reindexar una matriz 2-D A para cambiar los índices de fila y columna, reemplazando efectivamente todos sus elementos a_{ij} Con Ají picante}. La notación para la transposición es un superíndice ⊤ o ‘ en la matriz. En numpy, puede llamar al método .T o .transpose() del objeto np.ndarray para transponer una matriz.
- producto escalar y multiplicación de matrices: el producto C=LEJOS de dos matrices A (n×m) Y B. (m × profundidad) debe tener una forma norte × pag Dos matrices solo se pueden multiplicar si la segunda dimensión de la primera coincide con la primera dimensión de la última. El elemento c_{ij} en la matriz resultante C se calcula como:
Puede ver que el artículo en la matriz de productos C es el producto punto del vector de fila y el vector de columna correspondientes en matrices A Y B.respectivamente.
- matriz inversa: Solo se pueden invertir matrices cuadradas, el producto de una matriz A (n×n) con su inversión a ^(-1) es una matriz identidad sí, donde los elementos de la diagonal son unos, todos los demás ceros. En numpy, una matriz se puede invertir usando la función np.linalg.inv.
- reordenamiento conjugado: definida como la transpuesta de una matriz conjugada. Suele estar marcado con un * o H (Hermitian) como superíndice. Una matriz conjugada es una matriz que se obtiene tomando el complejo conjugado de todos los elementos de la matriz original:
Piense en los números complejos, donde un número consta de una parte real y una parte imaginaria. Por ejemplo, a + ib es un número complejo, donde sí es la unidad imaginaria igual a la raíz cuadrada de -1. El complejo conjugado de a + ib es a-yo b. Dado que la mayoría de los conjuntos de datos con los que tratamos son matrices de números reales, la transpuesta conjugada es equivalente a la matriz de una transpuesta ordinaria.
- matriz de identidad: definida como una matriz cuadrada cuya transpuesta conjugada es también su inversa. Para una matriz unitaria tenemos su transpuesta igual a su inversa:
- Matriz de covarianza: La covarianza cuantifica la variabilidad común entre dos variables aleatorias X Y Y y se calcula como:
Una matriz de covarianza C es una matriz cuadrada de covarianzas por pares de características de la matriz de datos X (n muestras × m características). Tenga en cuenta de la definición de covarianza que cuando dos variables aleatorias se centran en 0, las expectativas de la variable aleatoria se vuelven cero y la covarianza se puede calcular como el producto escalar de los dos vectores de características. X Y Y. Por lo tanto, la matriz de covarianza de una matriz de datos con todas las características centradas se puede calcular de la siguiente manera:
Vale, esto me trae buenos recuerdos del álgebra lineal en la universidad. Ahora vamos a conocer a los protagonistas de este post.
PCA tiene como objetivo encontrar ejes ortogonales linealmente no correlacionados, también conocidos como componentes principales (PC) en el metro espacio dimensional para proyectar los puntos de datos en estas PC. La primera PC captura la mayor parte de la variación en los datos. Entendamos intuitivamente PCA colocándolo en una matriz de datos 2-D que se puede representar convenientemente mediante un diagrama de dispersión 2-D:
Dado que todas las PC son ortogonales entre sí, podemos usar un par de líneas perpendiculares en un espacio bidimensional como dos PC. Para que la primera PC capture la mayor variación, rotamos nuestro par de PC para que una de ellas esté alineada de manera óptima con la distribución de los puntos de datos. Luego, todos los puntos de datos se pueden proyectar en las PC, y sus proyecciones (puntos rojos en PC1) son esencialmente la representación de dimensiones reducidas resultante del conjunto de datos. ¡Viola, redujimos la matriz de 2-D a 1-D manteniendo la mayor variación!
Las PC se pueden determinar mediante la descomposición adecuada de la matriz de covarianza. C. Finalmente, el significado geométrico de la descomposición propia es encontrar un nuevo sistema de coordenadas de los vectores propios para C a través de turnos.
En la ecuación anterior, la matriz de covarianza C(m×m) descompuesto en una matriz de vectores propios W(m×m) y una matriz diagonal de metro valores propios Λ. Los vectores propios, que son los vectores columna en W, son de hecho las PC que estamos buscando. Luego podemos usar la multiplicación de matrices para proyectar los datos en el espacio de la PC. Para reducir la dimensionalidad, podemos proyectar los puntos de datos en el primer k PC como representación de datos:
PCA se puede implementar muy fácilmente con numpy porque la función clave que realiza la descomposición adecuada (np.linalg.eig) ya está integrada:
SVD es otro método de descomposición de matrices reales y complejas. Descompone una matriz en el producto de dos matrices unitarias (O, v*) y una matriz diagonal rectangular de valores singulares (Σ):
En la mayoría de los casos trabajamos con una matriz real. Xy las matrices uniformes resultantes O Y v también serán arreglos reales. Entonces la transpuesta conjugada de O es solo la transposición regular.
SVD también se implementó en numpy como np.linalg.svd. Para usar SVD para transformar sus datos:
PCA y SVD son enfoques estrechamente relacionados y ambos se pueden aplicar para descomponer cualquier matriz rectangular. Podemos analizar su relación realizando SVD en la matriz de covarianza. C:
De la derivación anterior encontramos que con la descomposición adecuada de , el resultado tiene la misma forma Cpodemos ver fácilmente la relación entre valores singulares (Σ) y valores propios (Λ):
Para confirmar esto con numpy:
¿Entonces que significa eso? Sugiere que en realidad podemos hacer PCA con SVD o viceversa. De hecho, la mayoría de las implementaciones de PCA en realidad hacen SVD bajo el capó en lugar de hacer una descomposición adecuada de la matriz de covarianza, ya que SVD puede ser mucho más eficiente y puede manejar matrices dispersas. Además, existen formas reducidas de la SVD que son incluso más baratas de calcular.
En la próxima publicación, profundizaré en las complejidades de varios solucionadores e implementaciones de SVD, incluidos numpy, scipy y la biblioteca de autogrado Google JAX recientemente desarrollada.
- Wolfram MathWorld
- Comprender el análisis de componentes principales, vectores propios y valores propios
- Relación entre SVD y PCA