¿Qué es una matriz de covarianza y cómo se utiliza?
La matriz de covarianza es una herramienta estadística crucial para entender la relación entre múltiples variables en un conjunto de datos. Esta matriz organiza todas las posibles covarianzas entre pares de variables en una estructura ordenada, facilitando el análisis y la interpretación de datos. Al aprender a construir y analizar esta matriz, podrás descubrir interrelaciones significativas y redundancias en tus datos, lo que es esencial en el análisis exploratorio de datos y en la construcción de modelos de machine learning.
¿Cómo construir una matriz de covarianza?
Cuando trabajas con datasets que tienen varias variables, calcular todas las posibles covarianzas entre los pares de datos es esencial. Para estructurar estos cálculos, se utiliza una matriz de covarianza, denotada generalmente con la letra griega sigma (Σ).
Estructura de la matriz:
Cada fila y columna de la matriz se asocia a una variable diferente del dataset.
Los elementos en la diagonal representan la varianza de cada variable, ya que la covarianza de una variable con ella misma es su varianza.
Los elementos fuera de la diagonal muestran la covarianza entre diferentes variables.
Cálculo de la matriz:
Se organiza el dataset en una estructura de filas y columnas, asociando cada celda a una covarianza específica.
Por ejemplo, el elemento en la fila X y columna Y será la covarianza entre las variables X e Y.
¿Cómo calcular la matriz de covarianza en Python?
El uso de Python para calcular la matriz de covarianza es eficiente y sencillo, gracias a las bibliotecas como NumPy y Seaborn.
Importar librerías necesarias:
import numpy as np
from sklearn.preprocessing import StandardScaler
Preprocesamiento de datos:
Normaliza tus datos utilizando herramientas como StandardScaler de Scikit-learn. Esto ayuda a estandarizar las variables al restarles el promedio y dividirlas por la desviación estándar.
Visualizar la matriz de covarianza te permite identificar más fácilmente las relaciones entre variables mediante diagramas como mapas de calor.
Utilización de Seaborn para graficar:
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(covariance_matrix, annot=True, cmap='coolwarm', square=True)plt.show()
Este mapa de calor facilita la identificación de correlaciones fuertes o débiles entre variables, marcadas por variaciones de color.
¿Cómo interpretar las correlaciones en la matriz?
La interpretación adecuada de la matriz de covarianza y sus visualizaciones puede revelar importantes hallazgos sobre tus datos:
Correlaciones altas o bajas: Busca valores cercanos a 1 o -1, que indican correlaciones positivas o negativas fuertes, respectivamente.
Distribución variable: La visualización gráfica junto a los patrones numéricos de la matriz te ayuda a identificar pares de variables que pueden estar ofreciendo la misma información.
¿Cuál es la importancia de la matriz de covarianza en Machine Learning?
La matriz de covarianza es fundamental para optimizar modelos de machine learning:
Reducción de dimensionalidad:
Análisis de componentes principales (PCA): Esta técnica se basa en la matriz de covarianza para identificar y reducir la información redundante en los variables, mejorando así la eficiencia del modelo.
Selección de características: Facilita la identificación de las variables más significativas para la construcción de modelos predictivos, impulsando la precisión y reducción de ruido en los datos.
Aprender y dominar la utilidad de la matriz de covarianza no solo fortalecerá tus habilidades analíticas, sino que te preparará para futuros desafíos en el ámbito del machine learning y la ciencia de datos. ¡Continúa explorando y aplicando estas herramientas poderosas!
Construcción y Análisis de la Matriz de Covarianza en Python
Aporto solo una forma de lograr la matriz de correlación en una sola línea, basado en el aporte de @maxplank
Me gustó el resultado, gracias por el aporte.
Algo que he aprendido al estudiar en la escuela de Data Science es que los heat maps son muy utiles para hacer estadistica descriptiva, este es solo uno de los ejemplos, pero en generar poder observar la magnitud de una variable con colores ayuda enormemente a la visualización y comprension de los datos. ¡Gracias por tu aporte!
Podemos usar También el método de Pandas:
dataframe.corr()
corr_matrix = iris.corr()
Que genial, es mucho más fácil
que genial aporte lo implementé así:
corr_matrix = iris.select_dtypes(include='number').corr()#select_dtypes() para filtrar las columnas numéricas
corr_matrix
Matriz de covarianza
Una matriz de varianzas-covarianzas es una matriz cuadrada que contiene las varianzas y covarianzas asociadas con diferentes variables. Los elementos de la diagonal de la matriz contienen las varianzas de las variables, mientras que los elementos que se encuentran fuera de la diagonal contienen las covarianzas entre todos los pares posibles de variables.
gracias!
Sería bueno complementar este curso con alguno mas básico, además de resúmenes debajo de cada clase, el profesor conoce muy bien lo que está hablando, eso es obvio, pero para los que no tenemos idea de estos conceptos se dificulta seguir todo lo que esta queriendo explicar, estoy haciendo mi mejor esfuerzo por terminarlo, pero hay muchas cosas que no estoy entendiendo y veo que cada vez hay menos aportes.
Yo creo que siempre puedes buscar algo en Google y/o Youtube :)
Puedes usar el canal de YouTube 365 Data Science
o Data Science for business
también esa Rafa Gonzalez Gouveia
y no olvidemos a StatQuest with Josh Starmer
Resumen de la clase:¿Qué es una matriz de covarianza?
Cuando se tienen más de 2 variables se calculan todas las posibles covarianzas de las parejas de datos, esto se organiza en una matriz y se obtiene lo que se conoce como una matriz de covarianza.
Esta se representa con la letra sigma mayúscula Sigma.
• Los valores de la diagonal dan valores muy altos porque evidentemente cada variable está muy correlacionada consigo misma.
• Los elementos que se encuentran fuera de la diagonal contienen las covarianzas entre todos los pares posibles de variables.
.
¿Qué hace el StandardScaler() de Scikit Learn?
Normaliza los datos restando el promedio y dividiendo sobre la desviación estándar en cada variable (Z-Score).
Nota: para calcular la matriz de correlaciones hay que obtener la transpuesta del Array con los datos escalados.
.
¿Cómo se calcula la matriz de covarianza con Python?
Método cov() de Numpy: covariance_matrix = np.cov(scaled.T)
Método corr() de Pandas: corr_matrix = df.corr()
Gracias por el resumen. Muy bueno
Muchas gracias por el aporte.
por si a alguien tiene la inquietud de cómo se haría con pandas (dataframes en lugar de arrays)
Normalizamos
Oh vaya, no habia reparado en eso. Pense que el hecho de ser dataframe era simplemente un nombre a un arreglo, pero claro viene con su juego de atributos de clase. Muchas gracias por la informacion
para visualizar la matriz de correlación, (esa que va de -1 a 1) coloqué un rango de colores rojo: correlación inversa, azul correlación directa
Con la librería pandas puedes utilizar las siguientes dos métodos:
Matriz covarianza
.cov()
Matriz correlación
.corr()
Y según yo nos evitamos tantas líneas de código.
Utilizando .cov(), arroja valores diferentes a los de la clase, no sé si sea correcto. Y con corr() los valores no son los mismos pero sí cercanos.
Al usar .cov() debes recordar que se estandarizaron las variables en la clase. Así que ambos métodos deben dan igual, muy cercanos al resultado de numpy.
((iris - iris.mean())/iris.std()).cov()
Sigma Mayúscula y Minúscula ... tenia esa duda ... la comparto por si a alguien le pasó lo mismo ...
Sigma Mayúscula
Sigma Minúscula
Para evitar tener que transponer la matriz podemos usar la opción ´rowvar´
´´´python
covariance_matrix = np.cov(scaled, rowvar=False)
´´´
Otra forma para no tener que transponer el arreglo y evitar unas cuantas líneas de código es usar apply para normalizar sobre el dataframe original y en la misma función de heatmap, al argumento de data le colocamos el método de pandas .corr(). Este organiza la matriz como el gráfico lo necesita.
¿Se debe aplicar siempre la transpuesta de la matriz, previo a extraer la matriz de covarianza?
Si, siempre ya que como es una matriz el procedimiento lo haría de manera lineal o uno a uno lo que haría que el calculo se hiera mal entonces al transponer estas colocando los datos de manera opuesta para el calculo, ejemplo:
Datos sin transponer:
x | x
y | y
z | z
Datos transpuestos:
x | y | z
x | | |
y | | |
z | | |
Como ves transpuestos adquieren una forma de matriz con el cual se puede hacer la operación que el profesor mostro en el tablero
Pdt: puedes usar iris.corr() para no complicarte que te arroja la matriz de covarianza sin tener que hacer todas las transformaciones que le hacen a los datos
Un poco tarde, pero tu pregunta em pareció muy interesante y después de indagar con chat GPT creo que la respuesta es depende. A continuación dejo la explicación brindad por chat GPT donde le pedí que lo explicara de la forma más sencilla posible ya que creo que es fácil perderse cuando se habla muy técnicamente.
Cada bloque representa un número o una cosa que quieres medir. Los bloques están en una caja y están apilados uno sobre otro.
Hay dos maneras de medir cómo están relacionados los bloques entre sí. Una manera es medir cómo están relacionados los bloques que están uno al lado del otro (es decir, las columnas de bloques) y la otra manera es medir cómo están relacionados los bloques que están uno encima del otro (es decir, las filas de bloques).
Para medir cómo están relacionados los bloques que están uno al lado del otro, debes sacar la caja de los bloques y ponerla de lado para que los bloques estén uno al lado del otro. Para medir cómo están relacionados los bloques que están uno encima del otro, no es necesario hacer nada, solo debes dejar la caja de bloques tal y como está.
Entonces, si quieres medir cómo están relacionados los bloques que están uno al lado del otro, debes transponer la caja de bloques, es decir, ponerla de lado. Si quieres medir cómo están relacionados los bloques que están uno encima del otro, no necesitas transponer la caja de bloques.
Amor a primera vista con la matriz de covarianza <3
Para ver la matriz de correlación se cambia a lo siguiente:
corr_matrix = np.corrcoef(scaled.T)
corr_matrix
y así con el nombre de esta variable.
¿Qué pasa cuando la relación entre dos variables no es lineal sino, por ejemplo, asintótica, la matriz reflejaría un valor de p bajo, existe algún indicador que permita evaluar correlaciones no lineales entre los datos sin hacer uso de una evaluación visual?
por lo visto hasta el momento, la primera evaluacion es visual evaluando la matriz de correlaciones y de covarianzas
Voy a aplicar esto a un dataset del trabajo que estaba analizando, excelente clase!!
sns.pairplot(iris)
Wow, excelente código, no lo conocía muy útil
una pregunta ¿que no en lugar de la matriz de covarianza seria matriz de correlación? ya que la correlacion se mide entre -1< x < 1
esa misma pregunta tengo yo, al normalizar los datos quedan entre el rango -1 y 1, y ya eso es suficiente para que me devuelva la matriz con el coeficiente de correlación y no la de covarianza?! :)
Pregunta. Si tengo una covarianza cov1 = -.1 y otra cov2 = -.6
¿Hay mayor correlación entre las variables de mi cov2, correcto?
Sí en la cov2 la relación es más fuerte pero es negativa. Mientras una variable crece la otra decrece.
Así es. cov2 es inversamente mayor la correlación que cov1.
Información resumida de esta clase
#EstudiantesDePlatzi
Cuando tenemos muchas variables y debemos analizar su correlación lo mejor es utilizar la matriz de covarianza
Es normal que esto pase, ya que por lo general nuestros datos tendrán muchas variables que analizar
Con .column puedo ver de manera rápida las categorías de mi set de datos
Las dimensiones de la matriz de covarianza es igual al número de variables
Es bueno analizar estas covarianzas de nuestros datos en números e igualmente podemos verlo de manera más visual con una gráfica de mapa de calor
Este mapa de calor es la mejor manera visual de entender esta matriz
La reducción de datos esta basado en la matriz de covarianza y este proceso es llamado análisis de componentes principales