Módulo 5: Distance Metrics Deep Dive

Euclidean Distance: Distancia Geométrica

Qué es Euclidean Distance

Mide la distancia "directa" entre dos puntos en el espacio (línea recta).

Fórmula:

euclidean(A, B) = sqrt(Σ(A_i - B_i)²)

Implementación:

import numpy as np

def euclidean_distance(a, b):
    """Euclidean distance"""
    return np.linalg.norm(a - b)

# Ejemplo
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

dist = euclidean_distance(a, b)
print(f"Euclidean: {dist:.4f}")  # 5.196

Euclidean vs Cosine

# Vectores con MISMA dirección pero DIFERENTE magnitud
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])

# Cosine (solo dirección)
cos = cosine_similarity(a, b)
print(f"Cosine: {cos:.4f}")  # 1.0 (idénticos)

# Euclidean (considera magnitud)
euc = euclidean_distance(a, b)
print(f"Euclidean: {euc:.4f}")  # 31.3 (muy diferentes)

# Conclusión: Euclidean sensible a magnitud

Cuándo usar Euclidean

Magnitud importa:

  • Image embeddings (pixel distances)
  • Audio signals

Embeddings normalizados:

  • Si todos embeddings tienen magnitud = 1.0
  • Entonces Euclidean ~ Cosine

No usar para:

  • Text embeddings (OpenAI, SBERT)
  • Embeddings de escalas diferentes

Batch Euclidean

from scipy.spatial.distance import cdist

X = np.array([[1, 2], [3, 4]])
Y = np.array([[1, 2], [5, 6]])

# Matriz de distancias
dists = cdist(X, Y, metric='euclidean')
print(dists)
# [[0.0, 5.66],
#  [2.83, 2.83]]

Resumen

  • Distancia directa en espacio
  • ⚠️ Sensible a magnitud
  • Uso: Image/audio embeddings
  • Evitar: Text embeddings no-normalizados

Módulo 5 - Cápsula 03