Aporto solo una forma de lograr la matriz de correlación en una sola línea, basado en el aporte de @maxplank
¿Para qué sirve la estadística descriptiva?
Estadística descriptiva vs. inferencial
Flujo de trabajo en data science
Plan del curso
Estadística descriptiva para analítica
¿Cómo usar Deepnote?
Tipos de datos
Medidas de tendencia central
Metáfora de Bill Gates en un bar
Medidas de tendencia central en Python
Medidas de dispersión
Desviación estándar
Medidas de dispersión en Python
Exploración visual de los datos
Diagramas de dispersión en el análisis de datos
Estadística en la ingesta de datos
Pipelines de procesamiento para variables numéricas
Transformación no lineal
Procesamiento de datos numéricos en Python
Pipelines de procesamiento para variables categóricas
Procesamiento para variables categóricas con Python
Correlaciones
Matriz de covarianza
Proyecto de aplicación
Cálculo de valores propios de una matriz
PCA: análisis de componentes principales
Reducción de dimensionalidad con PCA
Despedida
Conclusiones
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Francisco Camacho
Aportes 38
Preguntas 16
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()
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.
# 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.
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 😎.
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.
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']);
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()
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?