No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Matriz de covarianza

20/25
Recursos

Aportes 36

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()
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 馃槑.

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.

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.

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

  • 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 鈥渇lare鈥:

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=鈥榗oolwarm鈥,linewidths=1,linecolor=鈥榖lack鈥,vmin=-1,vmax=1)
plt.show()