まとめ
- Clasificar las medidas de distancia y similitud según su uso habitual.
- Comparar distancias representativas para vectores, distribuciones de probabilidad y transporte óptimo con ejemplos en código.
- Resaltar consideraciones de preprocesado y reducción de dimensionalidad que influyen en el comportamiento de la distancia.
Capítulo 4 #
Medidas de distancia y similitud #
Las distancias cuantifican cuán lejos están dos elementos; las similitudes hacen lo contrario. Son la base de la agrupación, la recomendación, la detección de anomalías y la evaluación de modelos generativos. Cada distancia parte de ciertas suposiciones sobre los datos, por lo que conviene elegir la métrica que mejor encaje con los datos y el algoritmo posterior.
Categorías principales #
1. Distancias en espacios vectoriales #
- Distancia euclídea: la más intuitiva; muy sensible al escalado de características.
- Similitud/distancia coseno (Similitud coseno): compara direcciones; ideal para TF-IDF o embeddings.
- Distancias Manhattan / Chebyshev: normas L1 y L∞; útiles para vectores dispersos o comparaciones robustas.
2. Distancias entre distribuciones de probabilidad #
- Divergencia KL (KL): entropía relativa; asimétrica y sensible a probabilidades cero.
- Divergencia Jensen–Shannon (Jensen–Shannon): variante simétrica y finita de KL; su raíz cuadrada es métrica.
- Distancia de Hellinger (Hellinger): usa raíz cuadrada para obtener simetría y triángulo.
3. Basadas en transporte óptimo #
- Distancia Wasserstein (Wasserstein): captura diferencias de ubicación y forma; popular en modelos generativos y detección de drift.
- Distancia Sinkhorn: variante regularizada con entropía que acelera el cálculo.
Comparar distancias vectoriales #
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics.pairwise import cosine_distances, euclidean_distances
embeddings = np.array(
[
[0.2, 0.4, 0.4],
[0.1, 0.9, 0.0],
[0.6, 0.2, 0.2],
[0.3, 0.1, 0.6],
[0.05, 0.45, 0.5],
]
)
labels = ["A", "B", "C", "D", "E"]
cos_dist = cosine_distances(embeddings)
euc_dist = euclidean_distances(embeddings)
fig, axes = plt.subplots(1, 2, figsize=(7.5, 3.3))
for ax, matrix, title in zip(
axes,
(cos_dist, euc_dist),
("Distancia coseno", "Distancia euclídea"),
):
im = ax.imshow(matrix, cmap="viridis")
ax.set_xticks(range(len(labels)))
ax.set_yticks(range(len(labels)))
ax.set_xticklabels(labels)
ax.set_yticklabels(labels)
ax.set_title(title)
for i in range(len(labels)):
for j in range(len(labels)):
ax.text(j, i, f"{matrix[i, j]:.2f}", ha="center", va="center", color="white")
fig.colorbar(im, ax=axes.ravel().tolist(), shrink=0.9, label="Distancia")
plt.tight_layout()

El “vecino más cercano” cambia según la métrica. La distancia coseno prioriza la dirección (B y E quedan próximos), mientras que la euclídea enfatiza diferencias de magnitud.
Cómo elegir una distancia #
- Revisa el escalado de variables
Estandariza o normaliza cuando las magnitudes difieren entre características. - Considera la dispersión
En datos dispersos (texto, recomendadores) suele funcionar mejor el coseno. - Identifica necesidades de distribución
Emplea KL/Jensen–Shannon/Hellinger para vectores de probabilidad; cuida las diferencias de soporte. - Determina si importa la forma
Wasserstein captura desplazamientos y dispersión, útil para modelos generativos y drift. - Equilibra precisión y coste
En alta dimensión o grandes volúmenes, valora aproximaciones (LSH, Sinkhorn).
Referencia rápida #
| Categoría | Medida | Uso típico | Notas |
|---|---|---|---|
| Vector | Similitud coseno | Embeddings de texto, TF-IDF, datos dispersos | Gestiona con cuidado los vectores nulos |
| Vector | Euclídea / L1 / L∞ | Agrupación con variables continuas | El escalado es crítico |
| Distribución | Divergencia KL | Comparar distribuciones de modelo vs datos | Asimétrica; sin definición con soporte cero |
| Distribución | Jensen–Shannon | Comparación simétrica de probabilidades | La raíz cuadrada es métrica |
| Distribución | Distancia de Hellinger | Inferencia bayesiana, vigilancia de drift | El diseño del histograma/normalización influye |
| Transporte óptimo | Distancia Wasserstein | Modelos generativos, detección de anomalías | Coste computacional alto; considera Sinkhorn |
Lista de verificación #
- ¿Se aclaró si las entradas son vectores o distribuciones?
- ¿Se comprobaron las hipótesis (simetría, desigualdad triangular) que exige el algoritmo posterior?
- ¿Se evaluó el impacto de normalizar o reducir la dimensión?
- ¿Se consideraron métodos aproximados cuando la distancia exacta es costosa?
- ¿Se visualizaron los cambios de distancia para comprobar que concuerdan con la intuición?