En las entradas sobre vectores, matrices y valores propios aparecieron tres ideas que aquí se encuentran en un mismo procedimiento.

Un conjunto de datos puede tener muchas características, pero no todas aportan información independiente. Algunas variables se mueven juntas, otras contienen ruido y algunas variaciones son tan pequeñas que apenas ayudan a distinguir unas observaciones de otras.

El análisis de componentes principales, conocido como PCA por Principal Component Analysis, busca una representación más compacta. Su objetivo no es conservar cada coordenada original, sino encontrar nuevas direcciones que retengan la mayor variación posible.

La idea puede resumirse así:

PCA gira el sistema de coordenadas para mirar los datos desde las direcciones donde más cambian.

Un conjunto de datos como una nube de puntos

Supongamos que medimos dos características de varias observaciones. Cada observación es un punto en el plano:

x(i)=(x1(i),x2(i)).\mathbf{x}^{(i)}=(x_1^{(i)},x_2^{(i)}).

Si dibujamos todos los puntos, obtenemos una nube. Puede ser aproximadamente circular, pero también puede estar alargada diagonalmente. En este segundo caso, aunque cada observación tenga dos coordenadas, gran parte de la información cambia siguiendo una sola dirección.

La primera componente principal apunta a lo largo de esa nube alargada. La segunda queda perpendicular y describe la variación que sobra alrededor de la dirección principal.

Esto no significa que PCA descubra una causa oculta. Solo encuentra direcciones matemáticas de mayor variación. La interpretación depende de qué representan las columnas y de cómo fueron medidas.

Primero: centrar los datos

PCA comienza calculando la media de cada característica. Si la matriz de datos es

X=(x1(1)x2(1)⋯xp(1)x1(2)x2(2)⋯xp(2)⋮⋮⋮x1(n)x2(n)⋯xp(n))∈Rn×p,X=\begin{pmatrix} x_1^{(1)} & x_2^{(1)} & \cdots & x_p^{(1)}\\ x_1^{(2)} & x_2^{(2)} & \cdots & x_p^{(2)}\\ \vdots & \vdots & & \vdots\\ x_1^{(n)} & x_2^{(n)} & \cdots & x_p^{(n)} \end{pmatrix}\in\mathbb{R}^{n\times p},

calculamos el vector de medias

μ=(μ1,μ2,…,μp).\boldsymbol\mu=(\mu_1,\mu_2,\ldots,\mu_p).

Después restamos esa media a cada fila:

Z=X−1μT.Z=X-\mathbf{1}\boldsymbol\mu^T.

La matriz ZZ contiene los datos centrados. Su nube de puntos queda alrededor del origen, lo que permite estudiar su forma sin que la posición absoluta domine el análisis.

La matriz de covarianza describe cómo se mueven las variables

Con los datos centrados construimos la matriz de covarianza:

C=1n−1ZTZ.C=\frac{1}{n-1}Z^TZ.

Cada elemento de CC compara dos características:

  • La diagonal contiene las varianzas individuales.
  • Fuera de la diagonal aparecen las covarianzas.
  • Una covarianza positiva indica que dos variables tienden a crecer juntas.
  • Una covarianza negativa indica que una tiende a crecer cuando la otra disminuye.

Para dos variables, la matriz tiene la forma

C=(Var⁡(x1)Cov⁡(x1,x2)Cov⁡(x1,x2)Var⁡(x2)).C=\begin{pmatrix} \operatorname{Var}(x_1)&\operatorname{Cov}(x_1,x_2)\\ \operatorname{Cov}(x_1,x_2)&\operatorname{Var}(x_2) \end{pmatrix}.

La covarianza no es todavía una nueva representación de los datos. Es un resumen de la geometría de la nube: indica en qué direcciones se extiende y cómo se relacionan sus ejes originales.

Después: encontrar las direcciones principales

Ahora calculamos los valores y vectores propios de CC:

Cvj=λjvj.C\mathbf{v}_j=\lambda_j\mathbf{v}_j.

Ordenamos los valores propios de mayor a menor:

λ1≥λ2≥⋯≥λp.\lambda_1\geq\lambda_2\geq\cdots\geq\lambda_p.

Cada vector propio vj\mathbf{v}_j es una dirección principal. Su valor propio λj\lambda_j indica cuánta varianza existe en esa dirección.

Por eso:

  • v1\mathbf{v}_1 es la primera componente principal.
  • v2\mathbf{v}_2 es la segunda, perpendicular a la primera.
  • Las componentes posteriores explican cantidades progresivamente menores de variación.

Aquí aparece la conexión con la entrada anterior: los vectores propios no son solamente una propiedad abstracta de una matriz. En PCA representan los nuevos ejes desde los cuales conviene observar los datos.

La proyección reduce las dimensiones

Si conservamos todas las componentes, solo estamos rotando el sistema de coordenadas. No hemos reducido información.

Para reducir de pp dimensiones a kk dimensiones, elegimos los primeros kk vectores propios y los organizamos en una matriz:

Vk=(v1v2⋯vk).V_k=\begin{pmatrix}\mathbf{v}_1&\mathbf{v}_2&\cdots&\mathbf{v}_k\end{pmatrix}.

La nueva representación se obtiene proyectando los datos centrados:

T=ZVk.T=ZV_k.

Si XX tenía 10 características y elegimos k=2k=2, cada observación pasa de tener 10 números a tener solo 2 coordenadas. Esas coordenadas no son necesariamente dos columnas originales: son combinaciones lineales de todas ellas.

Por eso un punto transformado puede escribirse como

tj=z⋅vj.t_j=\mathbf{z}\cdot\mathbf{v}_j.

El producto punto mide cuánto apunta el dato hacia la dirección principal.

¿Cuánta información conservamos?

La proporción de varianza explicada por la componente jj es

EVR⁡j=λj∑i=1pλi.\operatorname{EVR}_j=\frac{\lambda_j}{\sum_{i=1}^{p}\lambda_i}.

Si conservamos las primeras kk componentes, la varianza explicada acumulada es

EVR⁡1:k=λ1+λ2+⋯+λk∑i=1pλi.\operatorname{EVR}_{1:k}=\frac{\lambda_1+\lambda_2+\cdots+\lambda_k}{\sum_{i=1}^{p}\lambda_i}.

Por ejemplo, si las dos primeras componentes explican el 94 % de la varianza, un gráfico bidimensional puede ser una aproximación razonable de la estructura global. El 6 % restante no desapareció por accidente: decidimos descartarlo porque representa variación menos importante según este criterio.

La varianza explicada debe interpretarse con cuidado. Una componente puede explicar mucha variación y ser poco útil para una tarea de clasificación. La dirección de mayor variación no siempre es la dirección que mejor separa las clases.

Reconstruir una aproximación

PCA también permite aproximar los datos originales. Primero proyectamos:

T=ZVk.T=ZV_k.

Después regresamos al espacio original:

Z^=TVkT.\widehat{Z}=TV_k^T.

Finalmente recuperamos la media:

X^=Z^+1μT.\widehat{X}=\widehat{Z}+\mathbf{1}\boldsymbol\mu^T.

La matriz X^\widehat{X} no coincide exactamente con XX cuando descartamos componentes. Es la mejor aproximación lineal de rango kk asociada a esas direcciones principales. En imágenes, por ejemplo, esto permite observar cómo una fotografía puede conservar su apariencia general usando menos información.

Un ejemplo en Python

Una versión mínima del procedimiento puede escribirse así:

import numpy as np

# Filas: observaciones. Columnas: características.
X = cargar_datos()

# 1. Centrar cada característica.
Z = X - X.mean(axis=0)

# 2. Covarianza y valores/vectores propios.
C = np.cov(Z, rowvar=False)
valores, vectores = np.linalg.eigh(C)

# 3. Ordenar de mayor a menor.
orden = np.argsort(valores)[::-1]
valores = valores[orden]
vectores = vectores[:, orden]

# 4. Conservar dos componentes.
V2 = vectores[:, :2]
T = Z @ V2

# 5. Varianza explicada acumulada.
varianza_explicada = valores / valores.sum()

En la práctica también es común estandarizar las columnas antes de aplicar PCA, especialmente cuando las características usan escalas muy diferentes. No es lo mismo medir una variable en gramos y otra en metros que medir ambas en unidades comparables. Estandarizar puede evitar que la escala, en lugar de la estructura de los datos, determine las primeras componentes.

PCA y las visualizaciones de modelos de IA

En el artículo sobre redes neuronales las animaciones reducen datos de 10 dimensiones a un plano. Ese plano es una vista construida con PCA; el modelo, sin embargo, sigue entrenándose con las 10 características originales.

Esta distinción es importante:

  • PCA puede ayudar a visualizar datos de muchas dimensiones.
  • El gráfico muestra una proyección, no el espacio completo.
  • Dos puntos que parecen cercanos pueden estar separados en las dimensiones descartadas.
  • Dos clases que se superponen en 2D podrían separarse usando las coordenadas que no aparecen en el dibujo.

Una visualización es un mapa. Como cualquier mapa, selecciona qué conservar y qué ocultar.

Qué resuelve PCA y qué no

PCA es útil para explorar datos, reducir ruido, comprimir representaciones y acelerar algunos modelos. También ayuda a detectar correlaciones y a construir gráficos de datos que originalmente no caben en una pantalla.

Pero no es una solución universal. PCA:

  • solo encuentra combinaciones lineales;
  • es sensible a la escala de las características;
  • puede mezclar variables difíciles de interpretar;
  • no usa las etiquetas de clase;
  • puede eliminar información relevante para una tarea específica.

La decisión correcta no es conservar siempre el 95 % de la varianza. Conviene comparar la representación reducida con el objetivo real: visualizar, clasificar, comprimir o acelerar un cálculo son problemas distintos.

La idea que conviene conservar

PCA toma una nube de puntos, la centra, estudia su covarianza, encuentra sus direcciones principales y proyecta los datos sobre las más importantes.

Su fuerza está en convertir muchas coordenadas correlacionadas en pocas coordenadas ordenadas por variación. Su límite está en que una proyección siempre omite algo.

Cuando vemos un gráfico de puntos generado con PCA, no estamos viendo los datos “tal como son”. Estamos viendo una selección geométrica de sus direcciones más grandes. Entender esa selección es lo que permite usar la técnica sin confundir una visualización conveniente con la realidad completa del modelo.