No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Matriz de covarianza

20/25
Recursos

Aportes 38

Preguntas 16

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Aporto solo una forma de lograr la matriz de correlación en una sola línea, basado en el aporte de @maxplank

Podemos usar También el método de Pandas:
dataframe.corr()

corr_matrix = iris.corr()

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.

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.

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()

por si a alguien tiene la inquietud de cómo se haría con pandas (dataframes en lugar de arrays)
Normalizamos

scaler = StandardScaler()
scaled = scaler.fit_transform(
    iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
)

** pasamos a dataframe**

scaled_df=pd.DataFrame(scaled)

matriz de Covarianza y matriz de correlación

covar=scaled_df.cov()
correlacion_matrix_pd=scaled_df.corr()

vizualizamos matriz de correlación

hm=sns.heatmap(correlacion_matrix_pd,
                annot=True,
                cmap="RdBu",
                vmin=-1.0,
                yticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
                xticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
                )

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.

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

hm=sns.heatmap(correlacion_matrix_pd,
                annot=True,
                cmap="RdBu",
                vmin=-1.0,
                yticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
                xticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
                )

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.

Amor a primera vista con la matriz de covarianza ❤️

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.

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

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

Hola, probe hacer la matriz de covarianza con distintos métodos, ya que había diferencias muy chiquititas en los decimales, y me dio curiosidad comparar distintos métodos para compararlas.

Que loco shrek

Codigo

# Bonus
fig, axs = plt.subplots(1,3,figsize=(40,12),sharex=True,sharey=True)
fig.suptitle('Diferencias en distintos metodos de calcular la matriz de Covarianza')

# Si usas el metodo 3 sin este formato, te van a salir acomodados de una forma distinta la matriz de cov, pero con resultados correctos
x = iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']] 

# Los 3 metodos con los que saque la matrix de cov
methods = {
    # Metodo usado en clase
    'covariance_matrix,':covariance_matrix, 
    # Metodo en los comentarios
    'iris.corr(),':iris.corr(), 
    # lo mismo que se supone que hace skitlearn pero sin ser parte de la libreria
    '((x - x.mean())/x.std()).cov()':((x - x.mean())/x.std()).cov().T} 

cont = 0
for title, method in methods.items():
    axs[cont].set_title(title)
    sns.heatmap(
        data=method,
        annot=True,
        cbar=False,
        square=True,
        fmt='.19f', 
        annot_kws={'size':10},
        yticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
        xticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
        ax=axs[cont]
    );
    cont+=1
    
plt.show()

En este valor, se puede ver el desarrollo de nuestra matriz. Ademas nos indica que tipo de correlacion es nuestro dataset. Dependiendo del resultado, este nos dira lo que es realmente.

Ayuda

Si no entiendes que hace la .T transpuesta, aquí dejo un link que lo explica.

https://how.okpedia.org/es/python/como-hacer-una-matriz-transpuesta-en-python

sns.pairplot(iris, hue = 'species',palette='winter_r')
sns.heatmap(iris.corr(),annot=True,cmap='coolwarm')

Si quieren ver mejor los datos normalizados o escalados pueden ejecutar estos prints aqui un ejemplo =)

# normalizacion z-score Z = (X - μ) / σ
scaler = StandardScaler()
scaled = scaler.fit_transform(
    iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
)
print(scaled[:2, :])
print(scaled.T[:4, :2])
plt.figure(figsize=(10,10))
sns.set(font_scale=1.5)
hm = sns.heatmap(covariance_matrix,
                 cbar=True,
                 annot=True,
                 square=True,
                 fmt='.2f',
                 annot_kws={'size': 12},
                 yticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
                 xticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])

Una forma de obtener todas las variables categoricas es de la siguiente forma:

df.select_dtypes(exclude=[np.number])

Nosotros importaremos la clase StandardScaler de la biblioteca scikit-learn donde StandardScaler es una clase que se utiliza para estandarizar características numéricas en un conjunto de datos, los estandariza utilizando la “z-scaling” que aprendimos en una clase anterior 🔙.
Aplicamos un método llamado fit_transform() que combinara los pasos de ajuste y transformación. Durante el ajuste, se calculan la media y la desviación estándar de cada característica en los datos. Luego, durante la transformación, se aplica la estandarización a cada columna en función de la media y la desviación estándar calculadas en el ajuste 😎.

`g = sns.PairGrid(iris, hue='species')` `# Graficar con distintos tipos en la diagonal, superior e inferiorg.map_lower(sns.scatterplot)  # Gráficos de dispersión abajog.map_diag(sns.kdeplot)       # Densidad en la diagonalg.map_upper(sns.regplot)      # Regresión arriba` `# Añadir leyendag.add_legend()` `# Mostrar el gráficoplt.show() `![](https://static.platzi.com/media/user_upload/image-eec07898-2806-4906-a567-141685f75cb1.jpg)
🔍 **¿Sabías que en la Estadística Descriptiva usamos algo llamado *matriz de covarianza* para entender relaciones entre variables?** Imagina que tienes dos variables, como horas de estudio y calificaciones. La matriz de covarianza nos dice si al estudiar más, nuestras calificaciones suben o bajan. Si ambos aumentan juntos, la covarianza es positiva; si uno sube y el otro baja, es negativa. ¡Es como un mapa que muestra cómo se comportan nuestros datos juntos! 💡 **Dato interesante:** La matriz de covarianza es clave en técnicas avanzadas de ciencia de datos, como el Análisis de Componentes Principales (PCA), que nos ayuda a simplificar grandes cantidades de datos sin perder información importante. 🌐📊

La matriz de covarianza sirve para ver la correlación entre variables de cada columnas del dataset.

Es importante conocer bien los conceptos porque ya el calculo lo hace python en menos de 1s.

Que nivel de clase, hace que todas las piezas se unan, sin duda es una clase muy importante para todos.

Matriz de covarianza

La matriz de covarianza es una matriz cuadrada que contiene las covarianzas entre pares de variables aleatorias en un conjunto de datos. La covarianza es una medida estadística que describe la relación entre dos variables, indicando cómo se relacionan entre sí y cómo varían juntas.

La matriz de covarianza es una herramienta fundamental en el análisis multivariado de datos. Esta matriz describe la variación conjunta de dos o más variables aleatorias. Cada elemento de la matriz de covarianza representa la covarianza entre dos variables específicas. La diagonal principal de la matriz de covarianza muestra la varianza de cada variable, ya que la covarianza de una variable consigo misma siempre es igual a su varianza.

La matriz de covarianza se utiliza en muchas aplicaciones estadísticas, como en el análisis de componentes principales (PCA), la regresión lineal múltiple, el análisis discriminante y la teoría de estimación de máxima verosimilitud. También es útil para identificar las relaciones más fuertes entre variables en un conjunto de datos y puede ser utilizada para hacer predicciones y modelar sistemas complejos en muchas áreas de investigación, como finanzas, economía, biología, ingeniería, entre otros.

Buena clase.

Matriz de covarianzas

  • Es una matriz que contiene las correlaciones entre variables en los valores externos a la diagonal y las varianzas en la diagonal.

  • En python:

cov_matrix = np.cov(data)
# mapa de calor con esta matriz
sns.heatmap(cov_matrixm, annot-True)

LA MATRIZ DE COVARIANZA PERMITE REALIZAR EL PROCESO DE REDUCCIÓN DE DATOS, Y SE LLAMA ANALISIS DE COMPONENTES PRINCIPALES.

  • En estadística, la covarianza es la medida del cambio en una variable con el cambio en la otra variable. La covarianza nos dice cuánto cambia una variable si cambia otra variable. Podemos calcular la covarianza entre dos matrices NumPy con la numpy.cov(a1, a2)función en Python.

  • Aquí, a1representa una colección de valores de la primera variable y a2representa una colección de valores de la segunda variable. La numpy.cov()función devuelve una matriz 2D en la que el valor del índice```
    [0][0]es la covarianza entre a1y a1, el valor del índice [0][1]es la covarianza entre a1y a2, el valor del índice [1][0]es la covarianza entre a2y a1y el valor del índice [1][1]es la covarianza entre a2y a2. Consulte el siguiente

- ejemplo de código.


import numpy as np

array1 = np.array([1,2,3])
array2 = np.array([2,4,5])

covariance = np.cov(array1, array2)[0][1]
print(covariance)

Heatmap con otro estilo “flare”:

sns.heatmap(covariance_matrix, linewidth=3, annot=True, cmap='flare', linecolor='black',
            yticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
            xticklabels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width']);

Aquí pueden ver los parámetros de heatmap

Una forma màs facil de hacer tu matriz de correlacion
sns.heatmap(iris.corr(),annot=True,cmap=‘coolwarm’,linewidths=1,linecolor=‘black’,vmin=-1,vmax=1)
plt.show()