Reducción de Dimensionalidad en Análisis de Datos: PCA Aplicado
Clase 15 de 18 • Curso de Álgebra Lineal Aplicada para Machine Learning
Resumen
¿Cómo abordar la maldición de la dimensión en análisis de datos?
La maldición de la dimensión es un problema común en estadística que surge al incrementar las variables en un conjunto de datos. Si añadimos más dimensiones, necesitaremos exponencialmente más muestras para mantener la relevancia estadística. Por lo tanto, comprender cómo eliminar dimensiones innecesarias es crucial para mejorar el análisis de datos.
¿Cómo generar una muestra de datos en Python?
En primer lugar, es fundamental configurar y definir correctamente nuestras muestras de datos antes de realizar experimentos. Utilizamos librerías como numpy
y matplotlib
para este propósito. Aquí te mostramos cómo puedes hacerlo:
import numpy as np
import matplotlib.pyplot as plt
# Definimos la semilla para reproducir el experimento
np.random.seed(0)
# Generamos números aleatorios
X = 3 * np.random.rand(200, 1)
y = 20 + 20 * X + 2 * np.random.rand(200, 1)
# Formateamos las matrices
X = X.reshape((200, 1))
y = y.reshape((200, 1))
# Concatenamos los vectores
XY = np.hstack((X, y))
# Visualizamos la dispersión de los puntos
plt.scatter(XY[:, 0], XY[:, 1], marker='o', color='b')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
Este código genera muestras y visualiza la correlación entre las variables.
¿Cómo transformar el sistema de referencia para reducir dimensiones?
El paso clave en la reducción de dimensiones es centrar los datos, lo que implica restar la media de los datos originales. Luego, usando las Componentes Principales (PCA), podemos identificar las direcciones de mayor varianza que permiten una representación más sencilla de los datos.
# Centramos los datos
X_centered = X - np.mean(X, axis=0)
Y_centered = y - np.mean(y, axis=0)
# Recalculamos el producto interno
cov_matrix = np.dot(X_centered.T, X_centered)
# Calculamos los autovalores y autovectores
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)
# Graficamos los autovectores
vector_colors = ['r', 'b']
plt.quiver(*np.mean(X_centered, axis=0),
*eigenvectors[:,0], scale=eigenvalues[0],
color=vector_colors[0])
plt.quiver(*np.mean(y, axis=0),
*eigenvectors[:,1], scale=eigenvalues[1],
color=vector_colors[1])
plt.show()
En este código se calcula y grafica la transformación resultante, mostrando cómo los autovectores definen la dirección de máxima varianza.
¿Cómo interpretar la proyección en el espacio reducido?
La proyección en un nuevo sistema de referencia revela mucho sobre la información subyacente en los datos. Si logramos reescribir nuestra nube de puntos en función de los autovectores, podemos reducir las dimensiones sin perder demasiada información.
# Proyectamos en el sistema de autovectores
X_transformed = np.dot(X_centered, eigenvectors)
# Visualizamos la transformación
plt.scatter(X_transformed[:, 0], X_transformed[:, 1], marker='o', c='g')
plt.axhline(0, color='red', lw=2)
plt.axvline(0, color='red', lw=2)
plt.xlabel('PC 1')
plt.ylabel('PC 2')
plt.show()
Esta proyección nos permite reducir nuestras dimensiones, centrándonos en las variables que explican la mayor parte de la varianza.
Reflexiones finales sobre la reducción de dimensiones
Cuando se trabaja con conjuntos de datos extensos y variables interrelacionadas, la reducción de dimensiones, como la que se consigue mediante PCA, es esencial. Esto no solo mejora la eficiencia del análisis, sino que también facilita la interpretación de los resultados. Un enfoque cuidadoso y metodológico garantiza que mantengamos la esencia de los datos mientras eliminamos la redundancia innecesaria.
Si te interesa profundizar y dominar estas técnicas, te animo a seguir explorando y experimentando con diferentes conjuntos de datos. La práctica constante y el estudio te ayudarán a convertirte en un experto en análisis de datos. ¡Sigue adelante y nunca dejes de aprender!