Ortogonalidad en machine learning con Python
Clase 8 de 16 • Curso de Álgebra Lineal para Machine Learning
Contenido del curso
Operaciones con Vectores y Matrices
Multiplicación de Matrices
Construcción de un Modelo de Regresión Lineal
Comprende por qué la ortogonalidad y la ortonormalidad sostienen modelos más eficientes y estables en machine learning. Desde la relación con la similitud coseno y el ángulo de 90 grados, hasta su papel en PCA, verás cómo ejes independientes eliminan redundancia y aceleran el cómputo. Además, aplica los conceptos en Python con NumPy y visualiza con Matplotlib.
¿Por qué la ortogonalidad mejora machine learning?
La ortogonalidad implica independencia: moverte en una dirección no altera la otra, como norte-sur frente a este-oeste. En términos de datos, cada característica aporta información nueva y no redundante.
- Elimina redundancia: cada rasgo aporta algo distinto. Un modelo aprende mejor.
- Aporta estabilidad y velocidad: operaciones con vectores ortogonales son más simples y robustas.
- Habilita PCA: transforma variables correlacionadas en ejes ortogonales que capturan la esencia de los datos con eficiencia.
¿Qué significan ortogonalidad y ortonormalidad en R^n?
Ortogonalidad significa producto punto igual a cero y ángulo de noventa grados. Ortonormalidad añade que cada vector tenga norma uno (vector unitario). Así, tienes ejes independientes y de longitud estándar.
¿Cómo se relaciona la similitud coseno con el ángulo de 90 grados?
- Similitud coseno igual a cero indica ninguna relación lineal.
- Geométricamente equivale a vectores perpendiculares (90°).
- En datos: señales no redundantes y más informativas.
¿Cuántos vectores caben en R^n sin redundancia?
- Regla clave: en un espacio de n dimensiones, como R^n, hay a lo sumo n vectores mutuamente ortogonales.
- En R2: máximo dos ejes como X y Y.
- En R3: máximo tres ejes como X, Y y Z (la esquina de una habitación).
¿Qué es una base ortonormal y cómo reconstruye vectores?
- Base ortonormal: vectores ortogonales con norma uno.
- Ejemplo: base estándar â i = [1, 0] y ĵ = [0, 1]. Su producto punto es 0 y ambos miden 1.
- Con una base ortonormal puedes reconstruir cualquier vector del plano con combinaciones lineales, por ejemplo 5â i + 3ĵ = [5, 3].
¿Cómo implementarlo en Python con NumPy y Matplotlib?
Pasa de la teoría a la práctica en Google Colab usando NumPy y Matplotlib. Verifica ortogonalidad con el operador @, calcula la norma con np.linalg.norm, normaliza y visualiza con plt.quiver.
¿Cómo verificar el producto punto y la norma con NumPy?
import numpy as np
I = np.array([1, 0])
J = np.array([0, 1])
print(f"producto punto I·J: {I @ J}") # 0 → ortogonales
norma_I = np.linalg.norm(I)
norma_J = np.linalg.norm(J)
print(f"norma I: {norma_I}") # 1 → unitario
print(f"norma J: {norma_J}") # 1 → unitario
¿Cómo reconstruir un vector con la base estándar?
V = np.array([5, 3])
V_reconstruido = 5*I + 3*J
iguales = np.array_equal(V, V_reconstruido)
print(f"¿la base estándar puede construir V? {iguales}") # True
¿Cómo normalizar y graficar vectores ortogonales?
import numpy as np
import matplotlib.pyplot as plt
V1 = np.array([4, -2])
V2 = np.array([2, 4])
V3 = np.array([3, 3]) # redundante respecto a V1 y V2 (no aporta dirección nueva)
# 1) Ortogonalidad
print(f"V1·V2 = {V1 @ V2}") # 0 → ortogonales
print(f"V1·V3 = {V1 @ V3}") # 6 → no ortogonales
# 2) Normas y normalización
n1, n2 = np.linalg.norm(V1), np.linalg.norm(V2)
print(f"norma V1: {n1}")
print(f"norma V2: {n2}")
V1_n = V1 / n1
V2_n = V2 / n2
# 3) Verificación tras normalizar
print(f"V1_n·V2_n = {V1_n @ V2_n}") # 0 → siguen ortogonales
print(f"norma V1_n: {np.linalg.norm(V1_n):.2f}") # 1 → unitario
print(f"norma V2_n: {np.linalg.norm(V2_n):.2f}") # 1 → unitario
# 4) Visualización
plt.figure(figsize=(6, 6))
plt.quiver(0, 0, V1_n[0], V1_n[1], angles='xy', scale_units='xy', scale=1,
color='blue', label='V1 normalizado')
plt.quiver(0, 0, V2_n[0], V2_n[1], angles='xy', scale_units='xy', scale=1,
color='red', label='V2 normalizado')
plt.xlim(-5, 5); plt.ylim(-5, 5)
plt.title('Visualización de vectores ortonormales')
plt.legend()
plt.show()
- Usa el operador @ para el producto punto.
- Emplea
np.linalg.normpara la norma y normaliza dividiendo por ella. np.array_equalcompara arreglos para validar reconstrucciones.plt.quiverdibuja flechas desde el origen; configura angles='xy', scale_units='xy' y scale=1 para interpretar coordenadas en el plano.
¿Te animas a probarlo? Crea dos vectores 2D que creas ortogonales, valida con NumPy y comparte tu resultado en los comentarios.