Tutorial del Algoritmo ACP en Python
Análisis de Componentes Principales (ACP)
El análisis de Componentes Principales es un algoritmo esencial de reducción de dimensionalidad. Consiste en reducir la dimensión de los segmentos de datos con el fin de tener un menor número de variables, manteniendo de esta manera la información más importante. Este método es una herramienta de gran ayuda, la cual es capaz de realizar varias aplicaciones tales como la compresión de datos o la simplificación de decisiones laborales. Puedes seguir leyendo si quieres conocer más acerca de este algoritmo.
El foco principal de este método de reducción de dimensionalidad es que el segmento de datos se vuelva más simple mientras retiene la información más importante. Esto hace que sea más fácil visualizar y manipular los datos, lo cual ayuda a un análisis más rápido.
¿Ya entiendes cómo funciona ACP? ¡Salta al código!
¿Cómo es posible el ACP?
Hay múltiples maneras de realizar un ACP. En este apartado vamos a explicar la forma más utilizada: descomposición propia de la matriz de covarianza.
Una descomposición propia, en álgebra lineal, es la factorización de una matriz. Podemos usar una expresión matemática para representar esto a través de los valores y vectores propios. Estos conceptos serán explicados en la sección 3: “Calcular la Descomposición Propia de la Matriz de Covarianza”. Teniendo esto en cuenta, adentrémonos entre los cinco pasos para realizar el algoritmo de Análisis de Componentes Principales:
1. Estandarización
La estandarización es una forma de escalonamiento en el cual los valores están centrados alrededor del valor medio y tiene una unidad de desviación típica. De esta manera nos permite trabajar, por ejemplo, con métricas no relacionadas.
Esto significa que cada característica está estandarizada para tener una media de 0 y una variación de 1, estableciendo cada característica en la misma escala. Así cada dato tomado puede contribuir equitativamente en el análisis, sin importar la diferencia entre las variables o si son incluso tipos de variables diferentes. Este paso previene que las variables con rangos de 0 a 100 dominen ante aquellas con valores de 0 a 1, haciendo una salida más parcial y exacta.
Matemáticamente, podemos calcular la estandarización a través de la resta del valor medio y dividiendo por la desviación típica para los valores de cada variable. Usualmente representamos a la puntuación típica con la letra “z”.
Una vez estandarizados los datos, cada característica estará en la misma escala.
2. Cálculo de la Matriz de Covarianza
La matriz de covarianza es una matriz cuadrada que muestra la relación entre dos características aleatorias, evitando la información duplicada. Esto debido a que las variables con las que trabajamos pueden estar algunas veces muy relacionadas.
Por ejemplo, imaginemos que tenemos leche y café, ambas son bebidas diferentes que las personas normalmente tomamos. Si realizamos una encuesta, le podremos preguntar a un número de personas cuál de estas bebidas les da más energía, anotando resultados con valores del 0 al 5. El resultado que arroje serán los puntos de información que recolectamos para armar nuestra matriz de covarianza. La siguiente tabla representa los datos obtenidos de tres sujetos, teniendo dos variables: “C” y “M”, que identifican al café y a la leche, respectivamente.
Esta tabla puede ser representada en una gráfica como la siguiente:
Como podemos notar, el eje horizontal representa al café, mientras que el eje vertical representa la leche. Aquí, podemos observar algunos vectores creados con los valores mostrados en la tabla anterior, y cada vector está etiquetado de acuerdo a las respuestas de cada sujeto. Esta gráfica puede ser representada a su vez por una matriz de covarianza, la cual comparará los valores de cada característica y procederá a realizar los cálculos necesarios.
Esta matriz de covarianza se calcula a través de la multiplicación entre la matriz original “A” y la misma matriz traspuesta, luego es dividida por el número de muestras. Se puede apreciar mejor en la siguiente fórmula:
Resultando en matrices como las siguientes:
Tenemos dos instancias de matrices de covarianza. Una es una matriz 2x2, mientras que la otra es una matriz 3x3. Cada una con un número de variables correspondiente a sus dimensiones. Cabe destacar que estas matrices son simétricas con respecto a la diagonal principal. ¿Por qué?
Comencemos destacando el hecho que la covarianza de una variable consigo misma representa a la diagonal principal de cada matriz, y a su vez se puede definir como la varianza de la variable.
cov(x,x)= var(x)
Además, tomemos en cuenta que la covarianza cumple la propiedad conmutativa, entonces:
cov(x,y)= cov(y,x)
De esa forma, vemos que tanto las partes triangulares superior e inferior son iguales, haciendo la matriz de covarianza simétrica con respecto a la diagonal principal.
En este punto, necesitamos tener en cuenta el signo de la covarianza. Si es positivo, significa que ambas variables son correlacionadas; si es negativo, son inversamente correlacionadas.
3. Calcular la Descomposición Propia de la Matriz de Covarianza
En esta fase, procederemos a calcular los valores y vectores propios de la matriz de covarianza del paso anterior. De esta forma, obtendremos el Componente Principal. Antes de adentrarnos en todo este proceso, vamos a hablar sobre los conceptos necesarios del álgebra lineal.
En el campo de la Ciencia de Datos, los valores y vectores propios son bases matemáticas esenciales que los científicos deben emplear.
Un vector propio es un vector que representa una aproximación a una matriz grande. Este vector no cambia bajo ninguna circunstancia; en su lugar, se vuelve una versión escalonada del vector original. Esta versión escalonada se obtiene gracias al valor propio, que es un valor calculado que amplía al vector. Ambos vienen en pares y su número es igual al número de dimensionalidad de la matriz.
Los componentes principales, son variables formadas como combinaciones lineales de las características iniciales. Su objetivo principal es guardar la mayor cantidad de datos no correlacionados en el primer componente y dejar el resto al siguiente, el cual tendrá la información restante, así consecutivamente hasta que todos los datos estén guardados.
Este procedimiento ayudará en la reducción de dimensionalidad mientras se retiene la mayor cantidad de información posible y descarta los componentes con menor información.
Ya que tenemos estos conceptos claros. La verdadera pregunta es: ¿cómo este algoritmo es capaz de construir el Componente Principal?
Toda la magia de estos cálculos se debe gracias a los vectores y valores propios. Los vectores propios representan las direcciones de los ejes donde la máxima información está guardada, estos vectores son conocidos como Componentes Principales. Los valores propios, como ya sabemos, son valores unidos a los vectores propios, estos determinan la variación que tiene cada componente principal.
Si clasificamos los vectores propios en orden de cada valor propio, de mayor a menor, podemos obtener los componentes principales en orden de importancia, tal como la siguiente imagen.
Con el componente principal establecido, lo único que faltaría hacer es calcular la proporción de variación correspondiente a cada componente. Esto se puede calcular dividiendo los valores propios de cada componente con la suma de los valores propios.
4. Vector de Características
Un vector de características es un vector que contiene muchas variables. En este caso, está formado con el componente principal más importante, es decir, el componente principal que tiene los vectores correspondientes a los valores principales más grandes. El número de componentes principales que queramos añadir a nuestro vector de características depende de nosotros y del problema que se va a resolver.
Siguiendo el ejemplo del paso anterior, sabiendo entonces que 1>2 , nuestro vector de características puede ser establecido de la siguiente manera:
Además, sabemos que nuestro segundo vector contiene información menos relevante, por lo cual podemos obviar y solo formar nuestro vector de características con el primer componente principal.
Tenemos que considerar que reducir nuestra dimensionalidad causará pérdida de información, afectando la salida del problema. Podemos descartar componentes principales siempre y cuando lo veamos conveniente, por ejemplo, cuando la información en el resto de componentes principales sea menos significativa.
5. Reformular los datos a lo largo de los Ejes de los Componentes Principales
Ya que los datos de entrada aún se encuentran en términos de las variables iniciales, debemos utilizar el vector de características para reorientar los ejes a aquellos representados por los componentes principales de nuestra matriz.
Puede realizarse multiplicando la transpuesta de la matriz original estandarizada por la matriz transpuesta del vector de características.
Ahora que finalmente tenemos el segmento de datos finales, ¡eso es todo! Hemos completado un algoritmo de Análisis de Componentes de Datos.
Cuando tenemos datos simples, como el ejemplo anterior, es bastante sencillo hacer este procedimiento manualmente. Sin embargo, si trabajamos con una cantidad de datos masiva, los científicos buscarán maneras de utilizar este algoritmo a través de la programación. Es por ello que mostraremos un ejemplo en Python.
Tutorial de Análisis de Componentes Principales en Python
Sigue el código en github: https://github.com/AccelAI/AI-Tutorials/blob/main/PCA_Tutorial/PCA_Tutorial.ipynb
Lo primero que haremos es importar todos los segmentos de datos y funciones que vamos a utilizar. Para una explicación resumida de los paquetes: NumPy es una librería que nos permite usar funciones matemáticas, lo utilizaremos para operar con las matrices (que también están disponibles gracias a la misma).
Seaborn y Matplotlib son utilizadas para generar diagramas y gráficas. Matplotlib también es utilizada como una extensión de NumPy, donde se incluyen más funciones matemáticas.
Sklearn es una palabra reservada para scikit-learn, una librería enfocada al Machine Learning en Python, tiene cargada algunos segmentos de datos y varios algoritmos para el Machine Learning.
Luego, vamos a declarar una clase a la que llamaremos PCA, la cual tendrá todos los pasos que aprendimos anteriormente en este blog.
Estas funciones son bastante intuitivas y fáciles de seguir. El siguiente paso es implementar esta clase. Vamos a inicializar las variables a utilizar.
Aquí podemos notar que utilizamos una librería de segmentos de datos, extraída de scikit.learn. Luego, asignamos estos valores a nuestras variables. Scikit-learn viene con numerosos segmentos de datos, utilizaremos los conocidos como “Toys datasets”, o “Segmentos de Datos de Juguetes”. Estos son segmentos pequeños, utilizados mayormente en ejemplos de algoritmos o tutoriales.
Específicamente, vamos a cargar el segmento de datos de Diabetes. De acuerdo a los autores, estos datos están basados en “Diez variables iniciales, que incluyen edad, sexo, índice de masa corporal, promedio de presión arterial, y seis mediciones de suero sanguíneo, que fueron obtenidos de n = 442 pacientes de diabetes, así como la respuesta de interés, una medida cuantitativa de la progesión de la enfermedad en un año después de las variables iniciales”.
Siguiendo con el código, ahora vamos a inicializar la clase y comenzar a llamar a las funciones de la misma. Cuando corremos el código, podemos tener la siguiente salida.
Para ver las diferencias entre el segmento de datos principales, podemos llamar solo las dos primeras funciones de la clase, arrojando la siguiente gráfica.
Si hacemos el proceso completo, podemos visualizar los datos de esta manera.
Ahora, hemos aprendido sobre el cálculo de los procedimientos claves, que incluían bases importantes del álgebra lineal.
En Conclusión
El Análisis de Componentes Principales es un algoritmo sencillo pero bastante poderoso para reducir, comprimir y desenredar datos de alta dimensión. Esto nos permite separar los datos de una forma más clara y usarlo para otros algoritmos de machine learning.
Ya que los datos originales fueron reducidos en términos de dimensionalidad mientras se retienen tendencias y patrones, podemos notar que la salida final de este algoritmo es mucho más fácil de manipular, haciendo el análisis mucho más sencillo y rápido para el método de machine learning a usar. Esto nos da la opción de olvidar variables innecesarias y algunos problemas como la maldición de la dimensión.
Lo siguiente es usar tus variables transformadas en un nuevo algoritmo de machine learning y así finalizar tu investigación. Si quieres una guía general de los diferentes tipos de algoritmos que existen y cuándo puedes emplearlos, puedes revisar mi publicación anterior.
¡Sígueme aquí para obtener más tutoriales de inteligencia artificial y ciencia de datos por venir!
Do you identify as Latinx and are working in artificial intelligence or know someone who is Latinx and is working in artificial intelligence?
- Get listed on our directory and become a member of our member’s forum: https://lxai.app/
- Become a writer for the LatinX in AI Publication: http://bit.ly/LXAI-Volunteer
- Learn more on our website: http://www.latinxinai.org/
Don’t forget to hit the 👏 below to help support our community — it means a lot!
Thank you :)
Referencias:
- A guide to principal component analysis (PCA) for Machine Learning. A Guide to Principal Component Analysis (PCA) for Machine Learning (2020). Disponible en: https://www.keboola.com/blog/pca-machine-learning. (Accedido el 14 de febrero de 2022).
- Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 2825–2830, 2011.
- Jaadi, Z. A step-by-step explanation of principal component analysis (PCA). Built In (2021). Disponible en: https://builtin.com/data-science/step-step-explanation-principal-component-analysis. (Accedido el 14 de febrero de 2022).
- Tsesmelis, T. Introduction to principal component analysis (PCA). OpenCV. Disponible en: https://docs.opencv.org/4.x/d1/dee/tutorial_introduction_to_pca.html. (Accedido el 16 de febrero de 2022).
- Lanhenke, M. Implementing PCA from scratch. Medium (2021). Disponible en: https://towardsdatascience.com/implementing-pca-from-scratch-fb434f1acbaa. (Accedido el 15 de febrero de 2022).