Análisis de Componentes Principales

Análisis Exploratorio Multivariante · Almacenes y Minería de Datos

Diego Villalba

La Maldición de la Dimensionalidad

El problema geométrico

Cuando p (variables) crece, la geometría del espacio se vuelve contraintuitiva Bellman (1957).

\frac{V_{\text{esfera}}}{V_{\text{cubo}}} = \frac{\pi^{d/2}}{2^d \, \Gamma(d/2 + 1)} \xrightarrow{d \to \infty} 0

Veamos como la proporción del volumen de una hiperesfera inscrita en un hipercubo en \mathbb{R}^d:

Todo el volumen se concentra en las esquinas del hipercubo.

Intuición geométrica: 2D y 3D

Volumen relativo por dimensión

Implicaciones para el análisis de datos

Para mantener una densidad fija \rho en \mathbb{R}^d, las observaciones necesarias escalan como:

n \sim \rho \cdot L^d

El problema de las correlaciones:

  • Con p = 20 variables → \binom{20}{2} = 190 correlaciones posibles
  • Con p = 100 variables → 4,950 correlaciones

Important

Necesitamos métodos que resuman la información sin perder lo esencial.

Fundamentos Matemáticos del PCA

PCA: formulación y herramientas clave

Sea un conjunto de datos X \in \mathbb{R}^{n \times p} conn n observaciones, p variables

  • Centramos los datos \tilde{X} = X - \mathbf{1}\bar{x}^T

  • Quitamos la media de cada variable

  • Los datos quedan alrededor del origen

PCA: formulación y herramientas clave

Una vez centrados y organizados, calculamos la matriz de covarianza: \Sigma = \frac{1}{n} \tilde{X}^T \tilde{X}

  • Matriz de covarianza
  • Captura relaciones entre variables

PCA: formulación y herramientas clave

Finalmente, realizamos la eigendecomposición de \Sigma:

\Sigma w = \lambda w

  • Autovectores w: direcciones principales
  • Autovalores \lambda: varianza explicada

y proyectamos los datos en los primeros k autovectores:

Z = \tilde{X} W

Así construimos un nuevo espacio de menor dimensión que captura la mayor parte de la varianza original.

Implementación en dataset

Dataset: Iris

4 variables numéricas · 150 observaciones · 3 especies

Sépalo largo Sépalo ancho Pétalo largo Pétalo ancho
count 150.000 150.000 150.000 150.000
mean 5.843 3.057 3.758 1.199
std 0.828 0.436 1.765 0.762
min 4.300 2.000 1.000 0.100
25% 5.100 2.800 1.600 0.300
50% 5.800 3.000 4.350 1.300
75% 6.400 3.300 5.100 1.800
max 7.900 4.400 6.900 2.500

Paso 1: Estandarización

Obligatoria cuando las variables tienen escalas distintas:

z_{ij} = \frac{x_{ij} - \bar{x}_j}{s_j}

Después de estandarizar: \bar{z}_j = 0 y s_{z_j} = 1 para toda variable j.

scaler = StandardScaler()
X_std = scaler.fit_transform(X)

df_check = pd.DataFrame({
    'Variable': feature_names,
    'Media original': X.mean(axis=0).round(3),
    'Desv original': X.std(axis=0).round(3),
    'Media estand.': X_std.mean(axis=0).round(10),
    'Desv estand.': X_std.std(axis=0).round(3)
})
df_check
Variable Media original Desv original Media estand. Desv estand.
0 Sépalo largo 5.843 0.825 -0.0 1.0
1 Sépalo ancho 3.057 0.434 -0.0 1.0
2 Pétalo largo 3.758 1.759 -0.0 1.0
3 Pétalo ancho 1.199 0.760 -0.0 1.0

Paso 2: Matriz de covarianza

S = np.cov(X_std.T)

Note

Con datos estandarizados, la matriz de covarianza es idéntica a la matriz de correlación de Pearson.

Paso 3: Eigendescomposición

pca = PCA()
scores = pca.fit_transform(X_std)

eigenvalues = pca.explained_variance_
pve = pca.explained_variance_ratio_ * 100
pve_acum = np.cumsum(pve)
Componente Eigenvalue (λ) % Varianza % Acumulado
0 PC1 2.9381 72.96 72.96
1 PC2 0.9202 22.85 95.81
2 PC3 0.1477 3.67 99.48
3 PC4 0.0209 0.52 100.00

Paso 4: Scree Plot

Tip

Criterios para elegir k: Regla de Kaiser (\lambda_k > 1) · Varianza acumulada ≥ 80% · Codo del scree plot · Interpretabilidad de dominio

Paso 5: Biplot

El biplot superpone scores de observaciones y vectores de loadings.

Paso 5: Interpretación del biplot

  • Flechas largas → variable con alta contribución al componente
  • Flechas en la misma dirección → variables altamente correlacionadas
  • Separación de grupos → qué tan bien distingue PCA las clases

Paso 6: Loadings detallados

PC1 ≈ tamaño general | PC2 ≈ contraste sépalo largo vs ancho

PCA como compresión: Señal en Alta Dimensión

Señal 2D embebida en 10 dimensiones

PCA identifica correctamente que solo 2 dimensiones concentran la señal real.

Limitaciones del PCA

1. Linealidad: el caso Swiss Roll

PCA busca direcciones de máxima varianza lineales → no captura estructuras no lineales. PCA colapsa el Swiss Roll: puntos lejanos quedan superpuestos

2. Sensibilidad a outliers
PCA minimiza error cuadrático i.e. un solo punto alejado puede dominar el primer componente. Alternativa: Robust PCA (Candès et al., 2011): X = L + S

6. PCA no captura estructura de clases

PCA es no supervisado → maximiza varianza global sin considerar etiquetas. La dirección de máxima varianza puede no ser la que mejor separa las clases.

Más Allá del PCA: Técnicas No Lineales

t-SNE

t-distributed Stochastic Neighbor Embedding (van der Maaten & Hinton, 2008), Método no determinista que minimiza la divergencia KL entre distribuciones de pares en el espacio original y reducido:

\text{KL}(P \| Q) = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}}

Características:

  • Preserva estructura local (vecinos cercanos)
  • No preserva distancias globales — los clusters no son comparables entre sí
  • Hiperparámetro clave: perplexity (típicamente 5–50)

t-SNE en Iris

from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42, n_iter=1000)

UMAP

Uniform Manifold Approximation and Projection (McInnes et al., 2018)

Basado en geometría Riemanniana y teoría de categorías. Construye un grafo difuso ponderado:

w(x_i, x_j) = \exp\left(-\frac{d(x_i, x_j) - \rho_i}{\sigma_i}\right)

y minimiza la divergencia de entropía cruzada fuzzy entre el grafo original y el proyectado.

t-SNE vs UMAP: comparación

Característica t-SNE UMAP
Velocidad Lento (O(n^2)) Rápido (O(n^{1.14}))
Estructura global No preserva Preserva mejor
Nuevos datos transform()
Determinismo ✅ con random_state
Escalabilidad Hasta ~10k puntos Hasta millones

MNIST dataset

  • 70,000 imágenes de dígitos manuscritos (28x28 píxeles → 784 dimensiones)
  • 10 clases (dígitos 0–9)
  • Desafío clásico para reducción de dimensionalidad

PCA vs t-SNE en datos del MNIST

UMAP vs t-SNE en MNIST

¿Cuándo usar cada método?

Situación Método recomendado
Preprocesamiento antes de modelado PCA
Visualización exploratoria t-SNE o UMAP
Dataset grande (>50k puntos) UMAP
Transformar nuevos datos PCA o UMAP
Interpretabilidad de componentes PCA (o Sparse PCA)
Estructura no lineal compleja UMAP
Análisis supervisado + reducción LDA

Resumen y Conexiones

El espectro de métodos

El PCA es el punto de partida del análisis multivariante moderno. Sus conexiones:

  • Álgebra lineal: eigendescomposición, SVD, espacios vectoriales
  • Estadística: modelo probabilístico gaussiano, máxima verosimilitud
  • Optimización: Rayleigh quotient, multiplicadores de Lagrange
  • Aprendizaje automático: preprocesamiento, regularización, autoencoders lineales
  • Geometría diferencial: UMAP extiende PCA a variedades Riemannianas

El trade-off fundamental:

PCA ─────────────────────────────────────► t-SNE / UMAP
Lineal          Interpretable          No lineal
Global          Eficiente              Local
Reutilizable    Escalable              Exploratorio

Ejercicios Propuestos

Ejercicios

  1. PCA desde cero: implementa PCA usando únicamente numpy.linalg.svd. Verifica que tus eigenvalores coincidan con los de sklearn.

  2. Efecto de la estandarización: aplica PCA a Iris con y sin estandarización. ¿Cambian los componentes? Justifica matemáticamente.

  3. Reconstrucción: dado X y su proyección a k componentes, reconstruye \hat{X} = Z_k W_k^T + \mu. Grafica el error \|X - \hat{X}\|_F en función de k.

  4. Comparación t-SNE vs UMAP: aplica ambas técnicas al dataset MNIST (sklearn.datasets.load_digits). Compara separación de clases y tiempo de cómputo.

  5. Regla de Kaiser: ¿por qué la regla (\lambda > 1) solo aplica con datos estandarizados? Demuéstralo con un ejemplo que viola la regla sin estandarizar.