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