Lección · Módulo 2 · Álgebra para IA

Valores y vectores propios: el esqueleto de una matriz

En toda transformación lineal hay direcciones especiales que no rotan — solo se estiran o se encogen. Los vectores propios son esas direcciones; los valores propios son cuánto se estiran.

Mate MathPlay · Lección 2.2 · Álgebra para modelos

9 minutosInteractivoVisualCon Python

Idea central: cuando aplicás una matriz a un vector cualquiera, ese vector cambia de dirección y de tamaño. Pero hay direcciones especiales en las que solo cambia el tamaño — la dirección se mantiene. Esas son las direcciones propias de la matriz, y el factor de estiramiento es el valor propio. Esas dos cosas, juntas, capturan el esqueleto de la transformación.

1 Casi todos los vectores rotan. Pero algunos no.

En la lección anterior viste cómo una matriz 2x2 deforma una "F" entera: la rota, la estira, la sesga. Cada vector que dibujemos en el plano se mueve a una dirección distinta después de aplicarle la matriz.

Pero acaba de aparecer una pregunta sutil: ¿hay direcciones que la matriz respeta? O sea, ¿hay vectores que después de la transformación quedan apuntando exactamente en la misma dirección que antes (aunque tal vez con otro tamaño)?

La respuesta sorprendente: casi siempre sí. Para casi cualquier matriz, hay una o dos líneas en el plano sobre las que los vectores no rotan. Solo se estiran. Esas son las direcciones propias.

2 Definición: A · v = λ · v

Un vector v es un vector propio de la matriz A si al aplicarle A el resultado es el mismo vector multiplicado por un escalar λ:

A · v = λ · v

Pensalo así: aplicar la matriz A al vector v produce el mismo vector pero estirado. No rota, no se sesga. La dirección se mantiene. El número λ (lambda) se llama valor propio y dice cuánto se estiró.

3 Cómo se calculan

Para una matriz A = [[a, b], [c, d]] los valores propios salen de resolver una ecuación cuadrática que se llama ecuación característica:

det(A − λI) = (a − λ)(d − λ) − b · c = 0

Eso da una parábola en λ: λ2 − (a+d)λ + (a·d − b·c) = 0. Aplicás la fórmula resolvente y sacas dos valores propios λ1 y λ2. Después, para cada uno, resolvés (A − λI) v = 0 para encontrar el vector propio correspondiente.

No te preocupes por hacer la cuenta a mano: numpy tiene numpy.linalg.eig y te resuelve todo en una línea. Lo importante es que entiendas qué es lo que sale.

Cuidado: a veces no hay vectores propios reales

Si la matriz hace una rotación pura (sin estiramiento), no hay direcciones invariantes en el plano real — todo vector cambia de dirección al rotar. Matemáticamente la ecuación característica da valores propios complejos (con parte imaginaria), pero geométricamente eso significa "no hay líneas que la matriz respete". El sandbox de abajo te lo va a mostrar.

4 Tu turno: mové la matriz y mirá los ejes que sobreviven

Mismos cuatro sliders que la lección anterior. Ahora, además de la "F" deformada, ves dos lí>neas punteadas: las direcciones propias de la matriz. Cualquier punto que esté sobre esas líneas, después de aplicar la matriz, sigue sobre la misma línea (solo se estira o encoge). Los puntos que estén fuera, rotan.

F gris: figura original F naranja: figura después de la matriz v1: vector propio 1 v2: vector propio 2

Sandbox interactivo

Mové los 4 sliders. Las líneas punteadas rojas y verdes son las direcciones propias.

[
2.001.00 1.002.00
]
a2.00
b1.00
c1.00
d2.00
Vector propio 1 (rojo)
λ1+3.00
v1 dirección(0.71, 0.71)
Vector propio 2 (verde)
λ2+1.00
v2 dirección(-0.71, 0.71)

5 Por qué importan en IA y ciencia de datos

Los valores y vectores propios son una de las herramientas más reutilizadas en aplicaciones reales:

6 Variante 1: diagonalización (A = P D P−1)

Si una matriz A tiene vectores propios reales que cubren todo el espacio (en 2D, dos vectores propios linealmente independientes), entonces se puede descomponer de una forma muy útil:

A = P · D · P−1

donde P es la matriz cuyas columnas son los vectores propios, y D es una matriz diagonal con los valores propios.

Diagonalización: A se descompone en tres matrices más simples A cualquier matriz = P columnas = vectores propios · λ1 0 0 λ2 D = diagonal con valores propios · P−1 inversa de P "deshace P" Idea: P rota al sistema "propio", D estira en los ejes propios, P−1 vuelve al sistema original.

El razonamiento intuitivo: aplicar A es lo mismo que (1) rotar al sistema donde los ejes son los vectores propios, (2) estirar cada eje por su valor propio, (3) volver al sistema original.

¿Por qué importa? Porque elevar una matriz a una potencia se vuelve trivial: A10 = P · D10 · P−1, y como D es diagonal, D10 es solo elevar cada elemento de la diagonal al 10. Sin diagonalizar, tendrías que multiplicar A por sí misma 10 veces — una pesadilla computacional.

Caso aplicado · ejes principales de un cuerpo mineralizado

Anisotropía del yacimiento

Un cuerpo mineralizado rara vez es isótropo — las leyes varían más en una dirección que en otra. Eso se representa con una matriz simétrica de covarianza espacial. Diagonalizar esa matriz te entrega:

  • Vector propio 1: dirección de mayor variabilidad (suele ser el rumbo de la veta)
  • Vector propio 2: dirección perpendicular en el plano
  • Vector propio 3: dirección del manteo (inclinación)

Con esos tres ejes propios al yacimiento, los análisis posteriores (variogramas, kriging) se vuelven mucho más eficientes y los modelos predicen mejor.

Diagonalizar = "encontrar los ejes naturales del cuerpo mineralizado"

Cadenas de Markov para procesos minero-metalúrgicos

Si modelás un proceso secuencial con una matriz de transición T (probabilidades de pasar de estado a estado), entonces Tn te dice las probabilidades después de n pasos. Diagonalizando T obtenés Tn directamente en una operación.

Diagonalizar T = predecir el estado del proceso a largo plazo de un solo paso

7 Variante 2: SVD (Singular Value Decomposition) — la navaja suiza

La diagonalización funciona solo si la matriz es cuadrada y tiene suficientes vectores propios. La SVD es una descomposición más general que siempre existe, incluso para matrices rectangulares:

A = U · Σ · VT

donde U y V son ortogonales (rotaciones) y Σ es diagonal con los valores singulares (siempre positivos, ordenados de mayor a menor). Es la operación más usada en ciencia de datos — la base de PCA, sistemas de recomendación, compresión de imágenes y muchísimo más.

SVD: cualquier transformación = rotar + estirar + rotar círculo original VT rotar rotado Σ estirar elipse U rotar elipse rotada = A · (círculo) = A cualquier matriz

Lectura geométrica: cualquier transformación lineal se puede descomponer en tres pasos más simples: rotar (VT), estirar los ejes (Σ), rotar de nuevo (U). Los valores singulares en Σ dicen cuánto se estira cada dirección.

El primer valor singular es siempre el más grande. Si los siguientes son mucho más pequeños, significa que la transformación está "casi" comprimiendo todo a una dimensión principal. Esa es la base de la compresión: si descartás los valores singulares chicos, casi no perdés información.

Caso aplicado · compresión y limpieza de datos

Compresión de imágenes de dron minero

Un dron mapea la mina y genera imágenes aéreas de alta resolución. Cada imagen es una matriz enorme de pixels. La SVD descompone esa matriz y te permite quedarte solo con los k valores singulares más grandes:

  • k = 200 (todos): imagen original, archivo grande
  • k = 50: imagen casi indistinguible visualmente, archivo 75% más liviano
  • k = 10: imagen reconocible aunque borrosa, archivo 95% más liviano

Esto se llama "low-rank approximation" y permite almacenar y transmitir las imágenes ocupando una fracción del espacio original sin perder utilidad práctica.

SVD = compresión inteligente que mantiene lo importante

Limpieza de ruido en señales de sensores

Si tenés mediciones contaminadas por ruido (vibraciones parásitas, interferencia eléctrica), la SVD te ayuda a separar la señal principal (valores singulares grandes) del ruido (valores singulares pequeños). Reconstruí>s la matriz usando solo los valores singulares grandes y obtenés una versión más limpia de la señal.

SVD = filtro estadístico que sabe qué es señal y qué es ruido

Detección de patrones operacionales

Aplicada sobre la matriz de mediciones de planta a lo largo del tiempo (filas = tiempos, columnas = variables), la SVD identifica los "modos" operacionales dominantes — las combinaciones de variables que más información contienen sobre el estado del proceso. Es la base del control multivariable de procesos.

8 Variante 3: PCA (Análisis de Componentes Principales)

El uso más célebre de los vectores propios en ciencia de datos: PCA. Reduce un dataset con muchas variables correlacionadas a un dataset con pocas variables independientes, conservando la máxima cantidad de información posible.

La receta básica de PCA:

  1. Estandariza los datos (Z-scores, lección 1.1)
  2. Calcula la matriz de covarianza entre variables (lección 1.2)
  3. Diagonaliza esa matriz: vectores propios = "componentes principales"
  4. Proyecta los datos sobre los k vectores propios con mayores valores propios
PCA: una nube de puntos 2D se describe con 2 ejes propios (uno largo, uno corto) variable x1 PC1 95% varianza PC2 5% varianza Proyectar sobre PC1 solo 2 variables → 1 variable menos más PC1 (componente 1) 95% de la información preservada con la mitad de variables

El razonamiento intuitivo: si dos variables están muy correlacionadas, conociendo una ya sabés casi todo sobre la otra. PCA detecta esa redundancia. Crea una nueva variable artificial (PC1) que es la "mejor combinación lineal" de las originales y te da el máximo de información en menos dimensiones.

Caso aplicado · reducir dimensiones de un proceso minero

De 30 variables operacionales a 3 componentes

Una planta concentradora moderna mide 30+ variables en tiempo real: pH celdas, flujos de reactivos, densidades, presiones, temperaturas, granulometría, niveles, voltajes. Es imposible visualizar 30 variables a la vez.

PCA aplicado a esos 30 datos durante 3 meses suele reducir la complejidad a 3-5 componentes principales que explican el 90% de la variabilidad. Esos componentes son combinaciones lineales interpretables: PC1 puede ser "carga total al proceso", PC2 puede ser "rendimiento metalúrgico", PC3 puede ser "uso de reactivos".

PCA = 30 columnas se reducen a 3-5 sin perder lo esencial

Detección de anomalías multivariables

Una vez que tenés las 3 componentes principales, monitorés un proceso siguiendo solo esos 3 números. Cuando una observación se sale del "espacio normal" de los 3 componentes, es una anomalía multivariable — algo que solo se ve cruzando varias variables a la vez, no en una sola.

Esta es la base del monitoreo estadístico multivariable de procesos industriales (MSPC), más sensible que monitorear cada variable por separado.

PCA + MSPC = detectar fallas que ninguna variable sola revela

Caracterización geoquímica de yacimientos

Cuando tenés ensayos de 20+ elementos químicos por testigo de perforación, PCA revela las "firmas" geoquímicas dominantes: porfido cuprifero, pórfido aurífero, epitermal de baja sulfuración, etc. Cada firma agrupa elementos que aparecen juntos, y PCA los reúne automáticamente en componentes principales.

PCA en geoquímica = identifica el tipo de yacimiento sin pre-clasificar

+ Más parientes del concepto

El mundo de las descomposiciones matriciales es enorme. Otras herramientas que vale la pena conocer:

Descomposición QRVer

Cualquier matriz se descompone como A = Q · R, donde Q es ortogonal y R es triangular superior. Es la base de los algoritmos más estables para resolver sistemas lineales y de mínimos cuadrados (regresión). Es el método numérico que usa numpy.linalg.lstsq por dentro.

Multiplicidad algebraica vs geométricaVer

Un valor propio puede aparecer varias veces (multiplicidad algebraica) pero tener menos vectores propios independientes asociados (multiplicidad geométrica). Cuando ambas no coinciden, la matriz no es diagonalizable — necesitás la forma de Jordan, una generalización más sutil.

Matrices definidas positivasVer

Matrices simétricas con todos los valores propios positivos. Aparecen en covarianzas, métricas geométricas, energía en sistemas físicos, y son las que permiten que métodos como Cholesky (factorización eficiente) y gradiente conjugado funcionen. Si una matriz que deberí>a ser definida positiva tiene valores propios negativos, hay un error en los datos.

PageRank (vectores propios para grafos)Ver

El algoritmo que ordenó la web durante décadas es esencialmente calcular el vector propio dominante de la matriz de transición del grafo de páginas web. La página más importante es la que más aparece en el vector propio asociado al valor propio mayor (1). Mismo principio aplica a redes de citas científicas, redes sociales o cualquier grafo dirigido.

Ver el código en Python: cinco snippets, de eigenvalores a PCA real Click para abrir

Empezamos calculando eigenvalores a mano de una matriz 2x2 y vamos escalando hasta aplicar PCA a un dataset.

1. Eigenvalores 2x2 a mano (resolver la ecuación característica):

01_eigen_a_mano.pyPYTHON
# Matriz A = [[2, 1], [1, 2]]
a, b, c, d = 2, 1, 1, 2

# Ecuacion caracteristica: (a-L)(d-L) - bc = 0
# L^2 - (a+d)L + (ad-bc) = 0
T = a + d         # traza
D = a * d - b * c  # determinante

# Resolvente: L = (T +/- sqrt(T^2 - 4D)) / 2
disc = T**2 - 4 * D
sqrt_d = disc ** 0.5
lambda_1 = (T + sqrt_d) / 2
lambda_2 = (T - sqrt_d) / 2

print(f"lambda_1 = {lambda_1}")
print(f"lambda_2 = {lambda_2}")

2. Lo mismo con numpy:

02_eigen_numpy.pyPYTHON
import numpy as np

A = np.array([[2.0, 1.0], [1.0, 2.0]])
valores, vectores = np.linalg.eig(A)

print("Valores propios:", valores)
print("Vectores propios (columnas):")
print(vectores.round(3))

# Verificar A @ v = lambda * v para cada par
for i in range(2):
    v = vectores[:, i]
    print(f"
A @ v_{i+1} = {A @ v}")
    print(f"lambda_{i+1} * v_{i+1} = {valores[i] * v}")

3. Diagonalizar A = P D P^-1:

03_diagonalizar.pyPYTHON
import numpy as np

A = np.array([[4.0, 1.0], [2.0, 3.0]])
valores, P = np.linalg.eig(A)

D = np.diag(valores)
P_inv = np.linalg.inv(P)

# Verificar la descomposicion
A_reconstruida = P @ D @ P_inv
print("A original:"); print(A)
print("A reconstruida:"); print(A_reconstruida.round(3))

# A^10 calculado a la antigua vs. usando diagonalizacion
A10_lento = np.linalg.matrix_power(A, 10)
A10_rapido = P @ np.diag(valores**10) @ P_inv
print("
A^10 lento:"); print(A10_lento.round(2))
print("A^10 con diagonalizacion:"); print(A10_rapido.round(2))

4. SVD y compresión:

04_svd_compresion.pyPYTHON
import numpy as np

# Matriz 6x4 cualquiera
np.random.seed(42)
A = np.random.rand(6, 4) * 10

# SVD: A = U @ diag(S) @ V.T
U, S, Vt = np.linalg.svd(A, full_matrices=False)
print("Valores singulares (orden decreciente):", S.round(2))

# Reconstruccion completa
A_full = U @ np.diag(S) @ Vt
print("
Error de reconstruccion completa:", np.abs(A - A_full).max())

# Reconstruccion con solo k=2 (los 2 valores mas grandes)
k = 2
A_k = U[:, :k] @ np.diag(S[:k]) @ Vt[:k, :]
error_relativo = np.linalg.norm(A - A_k) / np.linalg.norm(A)
print(f"Error con k={k}: {error_relativo*100:.1f}% (perdida de informacion)")

5. PCA aplicado a datos operacionales simulados:

05_pca_proceso.pyPYTHON
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Simular 200 mediciones de 5 variables operacionales correlacionadas
np.random.seed(42)
n = 200
ton = np.random.normal(10000, 1500, n)         # tonelaje
pH = 10.5 - 0.0001 * (ton - 10000) + np.random.normal(0, 0.1, n)
flujo = 500 + 0.03 * ton + np.random.normal(0, 20, n)
densidad = 1.3 - 0.00001 * ton + np.random.normal(0, 0.02, n)
recup = 88 + 0.0005 * ton + np.random.normal(0, 1.5, n)

X = np.column_stack([ton, pH, flujo, densidad, recup])

# Estandarizar antes de PCA (z-scores)
X_std = StandardScaler().fit_transform(X)

# PCA
pca = PCA()
X_pca = pca.fit_transform(X_std)

print("Varianza explicada por cada componente:")
for i, v in enumerate(pca.explained_variance_ratio_):
    print(f"  PC{i+1}: {v*100:.1f}%")

acumulada = pca.explained_variance_ratio_.cumsum()
print(f"
3 primeras componentes explican {acumulada[2]*100:.1f}%")
print("De 5 variables podemos quedarnos con 3 sin perder lo esencial.")

9 Pregunta de chequeo

Una matriz tiene valor propio λ = 1 con vector propio v. ¿Qué le pasa al vector v cuando se le aplica la matriz?

Próxima lección

Hasta acá vimos vectores y direcciones sobre el plano. Pero las matrices reales de IA viven en miles o millones de dimensiones. Para hablar de eso necesitamos un lenguaje más general: espacios vectoriales y normas. Es lo que sigue.

LinkedIn WhatsApp

Regístrate al boletín MathPlay

De la idea al laboratorio que funciona: datos, simulación, visualización e IA explicadas con imágenes que se mueven. Te escribo cuando hay algo nuevo que vale la pena compartir.

Sin calendario fijo. Sin spam.

Listo. Te escribo cuando haya algo nuevo.

M
Mate MathPlay
Matemática visual abierta

MathPlay conecta matemática, programación y visualización para que los conceptos se entiendan jugando, no memorizando. Cada lección se sostiene por sí sola y trae código Python para que pruebes en tu máquina.

Más de MathPlay
← Lección anterior: matricesSiguiente: espacios y normas →Volver al módulo