Resumen

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.norm para la norma y normaliza dividiendo por ella.
  • np.array_equal compara arreglos para validar reconstrucciones.
  • plt.quiver dibuja 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.