Eigenvectors y eigenvalues

Verás que, aunque una transformación lineal cambia la dirección de la mayoría de los vectores, existen algunos vectores especiales que no rotan, solo se estiran o encogen.
Esos vectores son los autovectores (eigenvector), y la cantidad por la que se estiran o encogen se llama autovalor (eigenvalues).

Intuición: vectores que no cambian de dirección

Imagina una matriz que representa una transformación lineal —por ejemplo, una matriz de “shear” (cizallamiento), que deforma un cuadrado en un paralelogramo.
En la mayoría de los casos, todos los vectores cambian de dirección al aplicar la transformación… excepto algunos muy particulares. Esos vectores especiales mantienen su dirección (aunque pueden cambiar su longitud). Por eso decimos que son autovectores.

Ejemplo de una transformación Lineal:

import numpy as np

M = np.array([[2, 1],
              [1, 3]])

square = np.array([[0, 0, 1, 1, 0],
                   [0, 1, 1, 0, 0]])
transformed = M @ square
Código de la grafica

Código Python con Matplotlib

fig, ax = plt.subplots(figsize=(8,8))
ax.plot(square[0], square[1], 'b--', label='Original')
ax.plot(transformed[0], transformed[1], 'r-', label=f'Shear con b={b}')

ax.set_xlim(-1, 3)
ax.set_ylim(-1, 3)
ax.axhline(0, color='black')
ax.axvline(0, color='black')
ax.set_aspect('equal')
ax.legend()
plt.show()

Definición

Un vector \( \vec{v} \) es un autovector de una matriz \( M \) si, al aplicar la matriz transformadora sobre él, el resultado es el mismo vector escalado por un número \( \lambda \):

$$M \vec{v} = \lambda \vec{v}$$

Donde:

  • \( M \) → es una matriz cuadrada \(n \times n\)
  • \( \vec{v} \) → es un autovector
  • \( \lambda \) → es el autovalor asociado

Este número \( \lambda \) indica cuánto se estira o encoge el vector cuando la matriz actúa sobre él.

Interpretación geométrica

  • Si \( \lambda > 1 \): el vector se alarga.
  • Si \( 0 < \lambda < 1 \): el vector se encoge.
  • Si \( \lambda < 0 \): el vector cambia de sentido (se invierte).
  • Si \( \lambda = 1 \): el vector queda igual.

Calculando los eigenvectors y eigenvalues

Continuamos con el ejemplo inicial:

import numpy as np

# Calcular eigenvalores y eigenvectores
w, V = np.linalg.eig(M)

print("\nEigenvalores:\n", w)
print("\nEigenvectores (columnas):\n", V)

Salida:

Eigenvalores:
 [1.38196601 3.61803399]

Eigenvectores (columnas):
 [[-0.85065081 -0.52573111]
 [ 0.52573111 -0.85065081]]
Código de la grafica

Código Matplotlib

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,8))

# Cuadrado original (azul) y transformado (rojo)
ax.plot(square[0], square[1], 'b--', label='Original (cuadrado unidad)')
ax.plot(transformed[0], transformed[1], 'r-', label='Transformado M·S')

# Ejes
ax.axhline(0, color='black', linewidth=1)
ax.axvline(0, color='black', linewidth=1)

# Eigenvectores
for i in range(len(w)):
    v = V[:, i]            # vector propio
    Mv = M @ v             # su transformación
    λ = w[i]

    # Dibuja el eigenvector (azul)
    ax.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1,
              color='blue', width=0.007, label=fr'$v_{i+1}$')

    # Dibuja el vector transformado (rojo)
    ax.quiver(0, 0, Mv[0], Mv[1], angles='xy', scale_units='xy', scale=1,
              color='red', width=0.007, label=fr'$M v_{i+1} = \lambda_{i+1} v_{i+1}$')

    # Muestra texto con el eigenvalor
    ax.text(Mv[0]*1.1, Mv[1]*1.1, fr'$\lambda_{i+1}={λ:.2f}$', color='red', fontsize=10)

ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_aspect('equal', adjustable='box')
ax.legend(loc='upper left', facecolor='none', edgecolor='none')
ax.set_title("Transformación lineal y Eigenvectores", fontsize=14)
ax.set_xlabel("x")
ax.set_ylabel("y")
plt.grid(True)
plt.show()

Matrices simétricas

Cuando una matriz es simétrica (es decir, \( M = M^T \)), se cumple algo muy útil:

  • Todos sus autovectores son perpendiculares entre sí.
  • Sus autovalores son reales.

Por ejemplo:

A = np.array([[4, 1],
              [1, 4]])

autovalores, autovectores = np.linalg.eig(A)
print("Autovalores:", autovalores)
print("Autovectores:\n", autovectores)

print("Producto punto entre los autovectores:", np.dot(autovectores[:,0], autovectores[:,1]))

La salida mostrará que el producto punto es 0, confirmando que los autovectores son ortogonales.

Autovalores: [5. 3.]
Autovectores:
 [[ 0.70710678 -0.70710678]
 [ 0.70710678  0.70710678]]
Producto punto entre los autovectores: 0.0

Aplicaciones en ciencia de datos

Los eigenvectores y eigenvalores son fundamentales en data science:

Análisis de Componentes Principales (PCA)

  • Qué hace: Reduce dimensiones de un dataset encontrando los eigenvectores de la matriz de covarianza.
  • Ejemplo: Dataset Iris (150×4) → eigenvectores indican las direcciones de mayor variación (ej: longitud vs ancho de pétalo).

Redes Neuronales

  • Eigenvectores optimizan transformaciones en capas de redes profundas.
  • Ejemplo: Ajustar pesos para maximizar patrones.

Procesamiento de Imágenes

  • Eigenvectores en eigenfaces identifican características faciales clave.
  • Ejemplo: Reconocimiento facial en apps de seguridad.

Sistemas Dinámicos

  • Modelan cómo cambian datos con el tiempo (ej: predicciones financieras).
  • Eigenvalores determinan la estabilidad de los sistemas.

Historia real: En 2024, Spotify usó eigenvectores en su sistema de recomendaciones para identificar patrones en gustos musicales, mejorando la precisión en un 10%.

Cómo encontrar los Eigenvalues y Eigenvectors

Para cualquier matriz \(M\):

  1. Primero encontramos todos los eigenvalores λ.
  2. Luego, usando esos eigenvalores, encontramos los eigenvectores correspondientes.

La ecuación base \(M \vec{v} = \lambda \cdot \vec{v}\) será la clave de todo.

Pero para trabajar con ella algebraicamente, vamos a transformarla un poco.

La matriz identidad

Necesitamos la matriz especial llamada la matriz identidad, que se denota por \(I\). La matriz identidad es una matriz cuadrada con unos en la diagonal principal (de arriba a la izquierda hasta abajo a la derecha) y ceros en todas las demás posiciones. Ya la vimos como ejemplo anteriormente en el articulo de las matrices.

Por ejemplo, la matriz identidad de tamaño 3×3 es:

$$I = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix}$$

Y se llama “identidad” porque, al multiplicarla por cualquier matriz o vector, el resultado es exactamente el mismo.

Podemos decir que: \(I \cdot M = M\) y tambien que: \(I \cdot v = v\)

Manipulamos la ecuación para llegar al sistema característico

Volvamos a nuestra ecuación:

$$M \vec{v} = \lambda \cdot \vec{v}$$

Podemos escribir el lado derecho como \(\lambda I \cdot v\), ya que \(I \cdot v.\).

Entonces la ecuación queda así:

$$M \vec{v} = \lambda I \cdot \vec{v}$$

Restamos el término del lado derecho en ambos lados:

$$M \cdot \vec{v} \ – \lambda I \cdot \vec{v} = 0 $$

Sacamos vvv como factor común (como si fuera un número):

$$(M \ – \lambda I) \cdot \vec{v} = 0 $$

Y esta ecuación es fundamental: se conoce como la ecuación característica.


La condición de existencia de eigenvectores

Esta ecuación tiene dos tipos de soluciones posibles:

  1. La trivial, cuando \(v=0\).
    Pero ese vector no nos dice nada (no tiene dirección ni longitud), así que lo descartamos.
  2. La no trivial, cuando \(v≠0\).
    Para que exista esta solución, debe cumplirse una condición especial.

Recuerda una propiedad del álgebra lineal:

Una ecuación de la forma \(A \cdot v=0\) solo tiene una solución no trivial \(v≠0\) si la matriz A es singular, es decir, su determinante es igual a cero.

Aplicando esto a nuestra ecuación \((M \ – \lambda I) \cdot \vec{v} = 0 \), la condición será: \(det(M \ – \lambda I) \cdot \vec{v} = 0 \)

Esta ecuación nos permitirá encontrar los valores de \( \lambda \), los eigenvalores.


Interpretación geométrica: el área que se hace cero

Detrás de todo esto hay una idea visual muy poderosa.

Imagina que tienes una matriz \(M\) que transforma puntos del plano \(XY\). Puedes representarla como una transformación del cuadrado unitario (un cuadrado de lado 1 anclado en el origen).

Cuando multiplicas \(M\) por las coordenadas de los vértices de ese cuadrado, obtienes un nuevo cuadrilátero. En general, este nuevo cuadrilátero es un paralelogramo.

  • Si \(M\) solo escala el cuadrado, obtienes un rectángulo.
  • Si además deforma el cuadrado (por ejemplo, en un cizallamiento), obtienes un paralelogramo inclinado.

El área de ese paralelogramo es una medida de cuánto “estira” o “encoge” la transformación de \(M\).
Y el determinante de la matriz está directamente relacionado con esa área.

Cuando el determinante es cero, significa que la transformación ha colapsado el plano en una línea o un punto, es decir, ha perdido una dimensión. Eso ocurre exactamente cuando estamos en un eigenvalor, porque en ese caso el espacio queda “aplastado” en una dirección particular: la del eigenvector.


Ejemplo visual con una matriz 2×2

Imaginemos una matriz genérica \(M\) de 2×2:

$$M = \begin{bmatrix} a & b \\ c & d \end{bmatrix}$$

Y tomemos el cuadrado unitario cuyos vértices son (0,0), (1,0), (1,1) y (0,1).

Cuando aplicamos \(M\) sobre esos puntos, el cuadrado se transforma en un paralelogramo cuyos vértices vienen dados por los productos matriciales:

$$M \cdot S$$

donde \(S\) contiene las coordenadas de los vértices del cuadrado.
El área de ese nuevo paralelogramo se puede calcular directamente como:

$$\text{Área} = ad – bc$$

que es precisamente el determinante de \(M\).

Así que cuando el determinante \(ad−bc=0\), el paralelogramo “se aplasta” y pierde área. Geométricamente, eso es lo que ocurre cuando hay un eigenvalor: la transformación ya no conserva el área y “colapsa” el espacio en una dirección.


Cálculo con Python: encontrar los eigenvalores

Ejemplo con matriz 2×2.

$$M = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}$$

M = np.array([[2, 1],
              [1, 2]])

Calculamos eigenvalores y eigenvectores

eigenvalores, eigenvectores = np.linalg.eig(M)

print("Matriz M:")
print(M)

print("\nEigenvalores:")
print(eigenvalores)

print("\nEigenvectores (por columnas):")
print(eigenvectores)
Eigenvalores:
[1.38196601 3.61803399]

Eigenvectores (por columnas):
[[-0.85065081 -0.52573111]
 [ 0.52573111 -0.85065081]]

Ejemplo con matriz 3×3.

M3 = np.array([
    [4, -2, 1],
    [0, 3, -1],
    [0, 0, 2]
])

eigenvalores3, eigenvectores3 = np.linalg.eig(M3)

print("Matriz M3:")
print(M3)

print("\nEigenvalores:")
print(eigenvalores3)

print("\nEigenvectores (por columnas):")
print(eigenvectores3)
Matriz M3:
[[ 4 -2  1]
 [ 0  3 -1]
 [ 0  0  2]]

Eigenvalores:
[4. 3. 2.]

Eigenvectores (por columnas):
[[1.         0.89442719 0.33333333]
 [0.         0.4472136  0.66666667]
 [0.         0.         0.66666667]]

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *