La lección sobre aplicaciones lineales enunció que la matriz de una transformación depende de la base, y que la relación entre dos representaciones es una semejanza. Esta lección responde a la pregunta que aquella dejó planteada: entre todas las bases posibles, cuál produce la matriz más simple, y qué se conserva al cambiar de una a otra.
Vectores propios
El curso ha empleado los vectores propios en varias ocasiones —al describir el análisis de componentes principales, al justificar la simetría de — sin definirlos. La definición es la siguiente.
Sea . Un vector es un vector propio de si existe un escalar tal que
y es el valor propio asociado. La condición es parte de la definición: el vector nulo satisface la igualdad para todo y admitirlo la vaciaría de contenido.
Geométricamente, genera una recta que la transformación deja invariante. Sobre ella, la aplicación se limita a multiplicar por .
Reescribiendo la definición como con , el núcleo de debe ser no trivial, lo que por el criterio del determinante de la lección sobre la inversa y la transpuesta equivale a
Esta es la ecuación característica. Para es un polinomio de grado dos, de modo que hay a lo sumo dos valores propios reales, y puede no haber ninguno.
Las rectas son las direcciones que la aplicación deja invariantes. La flecha gris es un vector unitario; la roja, su imagen.
dos direcciones propias independientes: diagonalizable
λ = 3.00 , 2.00
tr = 5.00 · det = 6.00
En su base propia la matriz es diag(3.00, 2.00)
Diagonalización
Si tiene vectores propios linealmente independientes, colocarlos como columnas de una matriz produce
Es la semejanza de la lección anterior con una elección concreta de base: la formada por los propios vectores propios. En esa base la aplicación no mezcla direcciones, se limita a escalar cada eje por su valor propio. Es la forma más simple que la matriz puede adoptar.
import numpy as np
A = np.array([[2., 1.],
[0., 3.]])
vals, S = np.linalg.eig(A)
np.allclose(np.linalg.inv(S) @ A @ S, np.diag(vals)) # True
No toda matriz es diagonalizable, y la figura permite alcanzar los tres casos que lo impiden o lo permiten.
Con valores propios reales y distintos los vectores propios son automáticamente independientes y la diagonalización existe. Un múltiplo de la identidad ya es diagonal en cualquier base. Pero una cizalladura como tiene un valor propio doble y una sola dirección propia: no hay dos vectores propios independientes con los que formar , y la matriz se denomina defectiva. Una rotación carece de valores propios reales, porque ninguna recta sobrevive al giro.
La consecuencia práctica es que np.linalg.eig puede devolver valores complejos, y que la matriz que produce puede estar mal condicionada cuando la matriz se aproxima al caso defectivo. La diagonalización no es una operación siempre disponible ni siempre estable.
Lo que la semejanza conserva
Dos matrices relacionadas por representan la misma aplicación en bases distintas. Las cantidades que no dependen de la base son, por tanto, propiedades de la aplicación, y resultan idénticas en ambas.
| tr | 5.00 | 5.00 |
|---|---|---|
| det | 6.00 | 6.00 |
| λ | 3.00 , 2.00 | 3.00 , 2.00 |
S es la base; A permanece fija.
Las entradas cambian; la traza, el determinante y los valores propios, no.
Una elección concreta de devuelve la forma diagonal: la formada por los vectores propios. Para esa matriz es , y el resultado es . Cualquier otra produce entradas distintas con los mismos invariantes.
La demostración para el determinante es inmediata a partir de la multiplicatividad de la lección correspondiente:
Para la traza se usa la propiedad cíclica , que da . Los valores propios coinciden porque el polinomio característico es el mismo, y con ellos el rango.
De ahí salen dos identidades que conectan las cantidades:
En la base propia ambas son evidentes, ya que la matriz es diagonal; y como ninguna de las dos depende de la base, valen en cualquiera.
El teorema espectral
Para matrices simétricas la situación mejora de manera sustancial. El teorema espectral afirma que toda matriz simétrica real es diagonalizable, que sus valores propios son reales, y que sus vectores propios pueden elegirse ortonormales:
La diferencia con el caso general es que se sustituye por . No hay inversa que calcular, el condicionamiento de es exactamente por la lección sobre base y dimensión, y los casos defectivo y complejo quedan excluidos.
C = np.array([[2., 1.],
[1., 3.]]) # simétrica
vals, Q = np.linalg.eigh(C) # eigh, no eig
np.allclose(Q @ np.diag(vals) @ Q.T, C) # True
np.allclose(Q.T @ Q, np.eye(2)) # True
np.linalg.eigh no es una comodidad sino la rutina correcta: explota la simetría, garantiza valores propios reales por construcción y devuelve una base ortonormal ordenada. Emplear eig sobre una matriz simétrica produce el mismo resultado con más trabajo y con error de redondeo en la parte imaginaria.
Aplicación: el análisis de componentes principales
Las lecciones sobre subespacios y sobre base y dimensión presentaron el análisis de componentes principales de dos maneras: como la búsqueda del subespacio que minimiza el residuo, y como el cambio a la base donde los datos necesitan menos coordenadas. El teorema espectral explica por qué ambas descripciones coinciden y por qué el problema tiene solución.
La matriz de covarianza de unos datos centrados es simétrica y semidefinida positiva, como estableció la lección sobre la inversa y la transpuesta. El teorema espectral garantiza entonces una base ortonormal de vectores propios con valores propios reales y no negativos.
X = X - X.mean(axis=0)
C = X.T @ X / len(X)
vals, Q = np.linalg.eigh(C) # ascendente
Z = X @ Q[:, ::-1] # coordenadas en la base propia
En esa base la covarianza es diagonal: las nuevas coordenadas están incorreladas, y el valor propio -ésimo es la varianza a lo largo de la dirección . Retener las mayores es exactamente la aproximación de rango bajo de la lección sobre el rango, y el error de truncamiento es la suma de los valores propios descartados.
El análisis de componentes principales no es, por tanto, un algoritmo aparte. Es la diagonalización de una matriz simétrica, con la interpretación estadística de sus valores propios.
Ejercicio. Construir la cizalladura y comprobar que np.linalg.eig devuelve un valor propio doble y dos columnas prácticamente idénticas en . Calcular np.linalg.cond(S) y explicar por qué la diagonalización no es utilizable en ese caso. Repetir con y observar cómo cambia el condicionamiento.