Curso de Matemáticas para IA · Lección 43 de 180

La distancia depende de la geometría elegida

Deriva la distancia a partir de una norma, compara una pequeña búsqueda de vecinos más cercanos bajo L1, L2 y L-infinito, y depura las decisiones métricas en sistemas de IA.

Comparte este artículo

Cuando un enrutador de tickets de soporte, un recomendador o un sistema de recuperación busca el ejemplo almacenado más “cercano”, está tomando una decisión geométrica. Un punto que es el más cercano cuando cada coordenada contribuye por separado puede perder frente a otro punto cuando las coordenadas se combinan mediante la longitud al cuadrado. El algoritmo no se volvió inconsistente; cambió el significado de “cercano”.

Al terminar esta lección podrás derivar una distancia a partir de una norma, calcular una pequeña clasificación de vecinos más cercanos bajo varias métricas e identificar las decisiones de preprocesamiento y gestión de empates que hacen significativa esa clasificación.

Resultado de aprendizaje: Derivar la distancia a partir de una norma y comparar vecinos más cercanos.

Esta lección se basa en la Lección 040: L1, L2 y L-infinito interpretan el tamaño de forma distinta, que introdujo varias formas de medir el tamaño de un vector. La sección 3.3 del libro oficial Mathematics for Machine Learning proporciona la referencia matemática. El conjunto de datos, los cálculos, el código, la visualización y las evaluaciones de aquí son originales.

El punto más cercano empieza con un desplazamiento

Sean x=(x1,…,xn)x=(x_1,\ldots,x_n) y y=(y1,…,yn)y=(y_1,\ldots,y_n) dos puntos en Rn\mathbb{R}^n. Cada coordenada es una posición de característica; nn es el número de características. Para preguntar qué distancia hay entre xx e yy, primero resta coordenada por coordenada:

x−y=(x1−y1,…,xn−yn).x-y=(x_1-y_1,\ldots,x_n-y_n).

Esta diferencia es un vector de desplazamiento. Indica cuánto debe moverse un punto en cada coordenada para llegar al otro. El orden cambia el signo del desplazamiento, pero una norma da el mismo tamaño en ambos sentidos porque ∥v∥=∥−v∥\lVert v\rVert=\lVert -v\rVert.

Los nombres describen reglas de movimiento distintas. L1, llamada a menudo distancia Manhattan, suma lo que se mueve en cada coordenada. L2 mide la longitud en línea recta del desplazamiento. L-infinito solo pregunta cuál es el mayor movimiento en una coordenada. Un modelo que usa una de estas medidas está declarando qué tipos de movimiento considera costosos.

La referencia de la sección 3.3 también conecta un producto interno con una norma mediante ∥v∥=⟨v,v⟩\lVert v\rVert=\sqrt{\langle v,v\rangle}. Con el producto punto habitual, esta es la norma euclídea, por lo que d2(x,y)=⟨x−y,x−y⟩d_2(x,y)=\sqrt{\langle x-y,x-y\rangle}. Hay un matiz útil: la construcción de la distancia funciona para cualquier norma. L1 es una norma válida e induce una métrica válida, aunque no esté inducida por un producto interno en el sentido habitual de un espacio vectorial real.

Por qué hay que restar primero

La distancia compara dos ubicaciones mediante un único desplazamiento. No es la diferencia entre sus tamaños por separado. Por ejemplo, si x=(1,1)x=(1,1) y y=(1,−1)y=(1,-1), ambos puntos tienen norma L2 2\sqrt{2}, pero

x−y=(0,2),d2(x,y)=02+22=2.x-y=(0,2),\qquad d_2(x,y)=\sqrt{0^2+2^2}=2.

Calcular ∥x∥2−∥y∥2=0\lVert x\rVert_2-\lVert y\rVert_2=0 borraría el hecho de que los puntos están separados verticalmente por dos unidades. La receta mental segura es restar primero y aplicar después la norma elegida.

Los mismos puntos pueden tener vecinos más cercanos distintos

Considera un punto de consulta q=(0,0)q=(0,0) y tres registros candidatos en una representación de dos características. Las coordenadas son deliberadamente pequeñas y sin unidades: representan valores después de elegir una representación de características, no una noción universal de similitud.

PuntoDescripciónCoordenadas
AAcaso dominante en un eje(6,0)(6,0)
BBcaso equilibrado(4,4)(4,4)
CCcaso mixto(5,2)(5,2)

La clasificación cambia porque las normas recompensan distintas formas de desplazamiento. Aquí L1 favorece el punto AA, dominante en un eje, porque tiene el menor movimiento total de coordenadas. L2 elige CC: la combinación de sus dos coordenadas forma un segmento recto más corto que la diagonal de BB y el largo segmento horizontal de AA. L-infinito elige BB porque ninguna coordenada individual se mueve más de 44.

Una consulta, tres mapas de vecinos

La tabla es el respaldo semántico completo: las distancias menores quedan más cerca de la consulta q = (0, 0).
CandidatoCoordenadasL1suma de movimientos absolutosL2longitud en línea rectaL-infinitomayor movimiento de una coordenada
A dominante en un eje(6, 0)6.000puesto 16.000puesto 36.000puesto 3
B equilibrado(4, 4)8.000puesto 35.657puesto 24.000puesto 1
C mixto(5, 2)7.000puesto 25.385puesto 15.000puesto 2
Dos candidatos más cercanosA → CC → BB → C

Los números dentro de los círculos indican el puesto para esa métrica. El segmento discontinuo señala al candidato más cercano; los dos primeros puestos están delineados para que el mapa no dependa solo del color.

Una consulta, tres mapas de vecinosPara L1, el orden es A, después C y después B. Para L2, es C, después B y después A. Para L-infinito, es B, después C y después A. La consulta está en el origen en todos los paneles.L10246024característica 1característica 2consulta qA1B3C2L20246024característica 1característica 2consulta qA3B2C1L-infinito0246024característica 1característica 2consulta qA3B1C2

Para L1, el orden es A, después C y después B. Para L2, es C, después B y después A. Para L-infinito, es B, después C y después A. La consulta está en el origen en todos los paneles.

La geometría cambia el mapa de vecinos aunque las coordenadas de la consulta y de los candidatos permanezcan fijas.

La tabla y las etiquetas de puesto hacen que la conclusión esté disponible sin leer el SVG. La visualización añade una pista espacial: el extremo del segmento discontinuo cambia cuando cambia la métrica, mientras que las coordenadas permanecen fijas.

Una búsqueda transparente con NumPy

La documentación de NumPy para numpy.linalg.norm expone los dos controles necesarios aquí: ord elige el orden de la norma y axis elige el eje de coordenadas que se reduce. Por tanto, un lote de tres filas candidatas se procesa restando la consulta de cada fila y reduciendo cada fila por separado.

El siguiente código refleja la derivación en lugar de ocultarla en un objeto de vecinos más cercanos. Se ejecutó con NumPy; el orden impreso es el mismo que en el ejemplo desarrollado.

import numpy as np

query = np.array([0.0, 0.0])
points = np.array([[6.0, 0.0], [4.0, 4.0], [5.0, 2.0]])
labels = np.array(["A", "B", "C"])

difference = points - query
for name, order in [("L1", 1), ("L2", 2), ("L-infinity", np.inf)]:
    distances = np.linalg.norm(difference, ord=order, axis=1)
    ranked = np.argsort(distances, kind="stable")
    print(
        f"{name}: "
        + ", ".join(f"{labels[i]}={distances[i]:.3f}" for i in ranked)
    )
L1: A=6.000, C=7.000, B=8.000
L2: C=5.385, B=5.657, A=6.000
L-infinity: B=4.000, C=5.000, A=6.000

Hay tres operaciones separadas que conviene observar:

  1. points - query realiza la resta antes de aplicar cualquier norma.
  2. axis=1 calcula una norma por fila, de modo que cada candidato recibe una distancia.
  3. argsort convierte las distancias en una clasificación; la norma no decide por sí sola cómo tratar los valores iguales.

Para un conjunto de datos más grande, la clase NearestNeighbors de scikit-learn empaqueta la misma idea. Su configuración metric="minkowski" usa el parámetro p, donde p=1p=1 corresponde a L1 y p=2p=2 a L2; su método kneighbors devuelve tanto las distancias como los índices. El estimador es útil cuando la búsqueda debe integrarse en un flujo de modelos, pero la versión con NumPy es mejor para depurar porque todos los arreglos intermedios quedan visibles.

Para este ejemplo exacto, la configuración de búsqueda equivalente es:

from sklearn.neighbors import NearestNeighbors

search = NearestNeighbors(n_neighbors=2, metric="minkowski", p=2)
search.fit(points)
distances, indices = search.kneighbors(query.reshape(1, -1))
nearest_labels = labels[indices[0]]

Cambiar p a 1 o np.inf cambia la geometría, pero mantiene fijos los datos y el valor de k=2k=2. La API no hace desaparecer la elección de la métrica; hace explícita esa elección en un parámetro.

Límites que cambian la respuesta

La distancia solo es precisa después de especificar el espacio de características, la métrica y la política de búsqueda. Estos son los casos que más probablemente hagan engañosa una pequeña demostración de vecinos más cercanos.

Los empates son información, no ruido

Sean q=(0,0)q=(0,0), u=(1,1)u=(1,1) y v=(2,0)v=(2,0). Ambos candidatos tienen

d1(q,u)=∣1∣+∣1∣=2,d1(q,v)=∣2∣+∣0∣=2.d_1(q,u)=|1|+|1|=2, \qquad d_1(q,v)=|2|+|0|=2.

Si k=1k=1, las matemáticas proporcionan un empate, no un ganador único. Un sistema de producción debe indicar una clave secundaria determinista, devolver todos los candidatos empatados o usar una política adecuada para su aplicación. La ordenación stable del código NumPy hace reproducibles las ejecuciones repetidas, pero no demuestra que la primera fila empatada sea más similar.

Los puntos idénticos tienen distancia cero

Si x=yx=y, entonces x−y=(0,…,0)x-y=(0,\ldots,0) y toda norma da d(x,y)=0d(x,y)=0. Es una coincidencia exacta válida, no un error. Sin embargo, en una consulta sobre un conjunto de entrenamiento, consultar una fila contra la misma colección ajustada puede devolver la propia fila como vecino más cercano. Decide si las autocoincidencias son útiles antes de interpretar un resultado; una consulta externa que coincida por casualidad con una fila almacenada también debe recibir distancia cero.

El escalado de características forma parte de la geometría

Supón que una coordenada es el ingreso anual en dólares y otra es un conteo de cero a diez. La coordenada monetaria puede dominar una distancia L1 o L2 simplemente porque su unidad numérica es mayor. Estandarizar, cambiar la escala o asignar pesos del dominio cambia la geometría; no es un preámbulo cosmético. Ajusta cualquier regla de escalado dependiente de los datos con los datos de entrenamiento y aplica la misma regla a las consultas, o el mapa de vecinos puede filtrar información del conjunto de evaluación.

La distancia y la similitud coseno responden preguntas distintas

La distancia compara el desplazamiento entre dos puntos y, por tanto, incluye sus posiciones y magnitudes. La similitud coseno compara la dirección después de normalizar las longitudes. Para x=(1,1)x=(1,1) e y=(10,10)y=(10,10),

cos⁡(x,y)=xTy∥x∥2∥y∥2=1,\cos(x,y)=\frac{x^\mathsf{T}y}{\lVert x\rVert_2\lVert y\rVert_2}=1,

porque los vectores apuntan exactamente en la misma dirección, mientras que

d2(x,y)=∥x−y∥2=(−9)2+(−9)2=92≈12.728.d_2(x,y)=\lVert x-y\rVert_2 =\sqrt{(-9)^2+(-9)^2}=9\sqrt{2}\approx12.728.

Un sistema de recuperación basado en representaciones vectoriales puede preferir el coseno cuando la dirección es la noción de coincidencia buscada. Una aplicación sensible a la escala puede preferir una distancia inducida por una norma. Ninguna elección es correcta de forma universal, y la similitud coseno necesita una política separada para el vector cero porque su dirección no está definida.

La alta dimensionalidad exige medir, no repetir un eslogan

En algunas distribuciones de datos de alta dimensión, las distancias al vecino más cercano y al más lejano pueden acercarse entre sí, haciendo que la clasificación discrimine menos. Beyer, Goldstein, Ramakrishnan y Shaft describen este resultado de concentración de distancias bajo condiciones específicas en su artículo sobre vecinos más cercanos. Ese resultado advierte sobre los supuestos de los datos y de la carga de trabajo; no es una ley que vuelva inútil todo espacio de representaciones vectoriales. Inspecciona las diferencias entre distancias de vecinos, valida la métrica con consultas reservadas y considera si la representación contiene muchas coordenadas irrelevantes antes de culpar al algoritmo de búsqueda.

La siguiente lección aísla la comparación direccional que la distancia mezcla deliberadamente con la longitud: Lección 044, Angles and Cosine Similarity. La página del curso de Math for AI en inglés mostrará esa lección cuando su conjunto de traducciones esté activo.

Comprueba tu comprensión

Question 1

Para x = (5, −2) e y = (1, 1), calcula el desplazamiento y las distancias L1, L2 y L-infinito.

Show the step-by-step solution

Primero resta los puntos: x−y=(5−1,−2−1)=(4,−3)x-y=(5-1, -2-1)=(4,-3). Aplica cada norma a ese único desplazamiento. L1 es ∣4∣+∣−3∣=4+3=7|4|+|-3|=4+3=7. L2 es sqrt(4² + (−3)²) = sqrt(16 + 9) = 5. L-infinito es la coordenada absoluta mayor, max⁡(4,3)=4\max(4,3)=4. Las tres distancias son 7, 5 y 4, respectivamente.

Question 2

¿Por qué ||x||₂ − ||y||₂ no es una fórmula general para la distancia entre x e y? Demuéstralo con x = (1, 1) e y = (1, −1).

Show the step-by-step solution

Las longitudes separadas son ambas ∥x∥2=12+12=2\lVert x\rVert_2=\sqrt{1^{2} + 1^{2}} =\sqrt2 y ∥y∥2=12+(−1)2=2\lVert y\rVert_2=\sqrt{1^{2} + (-1)^{2}}=\sqrt2, así que su diferencia es cero. El desplazamiento real es x−y=(0,2)x-y=(0,2), cuya norma L2 es 02+22=2\sqrt{0^{2} + 2^{2}}=2. Hay que restar primero porque la distancia mide el vector que conecta las dos ubicaciones, no la diferencia entre sus distancias al origen.

Question 3

Usando q = (0, 0), A = (6, 0), B = (4, 4) y C = (5, 2), ¿qué dos candidatos son los más cercanos bajo L-infinito? Muestra las tres distancias relevantes.

Show the step-by-step solution

Restar qq deja las coordenadas de los candidatos. La distancia L-infinito conserva la coordenada absoluta mayor: d∞(q,A)=max⁡(6,0)=6d_\infty(q,A)=\max(6,0)=6, d∞(q,B)=max⁡(4,4)=4d_\infty(q,B)=\max(4,4)=4 y d∞(q,C)=max⁡(5,2)=5d_\infty(q,C)=\max(5,2)=5. Ordenar 4, 5 y 6 coloca a BB primero y a CC segundo, así que el resultado de los dos vecinos es [B,C][B,C].

Question 4

Bajo L1, q = (0, 0), u = (1, 1) y v = (2, 0) empatan. ¿Cuál es la distancia del empate y qué debe decidir una implementación con k = 1?

Show the step-by-step solution

Calcula cada desplazamiento desde el origen. Para uu, L1 da ∣1∣+∣1∣=2|1|+|1|=2; para vv, da ∣2∣+∣0∣=2|2|+|0|=2. Por tanto, la distancia empatada es 2. Una implementación con k=1k=1 debe elegir una política: devolver ambos y dejar que un paso posterior resuelva el empate, usar una clave secundaria documentada o aplicar una regla del caso de uso. El orden de un array puede hacer determinista la salida, pero no hace que un punto esté matemáticamente más cerca.

Question 5

Si la consulta x y el punto almacenado y son ambos (2, −1), ¿cuál es su distancia bajo cualquier norma y por qué es significativo ese resultado?

Show the step-by-step solution

El desplazamiento es x−y=(2−2,−1−(−1))=(0,0)x-y=(2-2,-1-(-1))=(0,0). Toda norma transforma el vector cero en cero, así que d(x,y)=0d(x,y)=0 para L1, L2 y L-infinito. Esta es la propiedad de identidad de los indiscernibles: los puntos idénticos no tienen desplazamiento. Es significativo como coincidencia exacta, aunque una búsqueda sobre el conjunto de entrenamiento puede necesitar una política explícita de autocoincidencias.

Question 6

¿Por qué una característica sin escalar puede dominar la distancia? Compara q = (0, 0), a = (1, 100) y b = (2, 0) con distancia L2.

Show the step-by-step solution

Los desplazamientos son a−q=(1,100)a-q=(1,100) y b−q=(2,0)b-q=(2,0). Sus distancias L2 son 12+1002=10001≈100.005\sqrt{1^{2} + 100^{2}}=\sqrt{10001}\approx100.005 y 22+02=2\sqrt{2^{2} + 0^{2}}=2. La segunda coordenada hace que aa parezca mucho más lejano aunque su primera coordenada esté más cerca. Reescalar o estandarizar las características puede hacer comparables las contribuciones de las coordenadas, pero esa regla de preprocesamiento debe ajustarse con datos de entrenamiento y reutilizarse de forma coherente.

Question 7

Para x = (1, 1) e y = (10, 10), ¿por qué la similitud coseno puede ser 1 mientras la distancia L2 no es 0?

Show the step-by-step solution

El producto punto es 1⋅10+1⋅10=201\cdot10+1\cdot10=20. Las longitudes son ∥x∥2=2\lVert x\rVert_2=\sqrt2 y ∥y∥2=102\lVert y\rVert_2=10\sqrt2, por lo que la similitud coseno es 20/(2⋅102)=120/(\sqrt2\cdot10\sqrt2)=1: las direcciones coinciden exactamente. La distancia conserva la diferencia de magnitud. El desplazamiento es (−9,−9)(-9,-9), así que d2(x,y)=81+81=162=92≈12.728d_2(x,y)=\sqrt{81 + 81}=\sqrt{162} =9\sqrt2\approx12.728. Las dos medidas responden preguntas distintas sobre la similitud.

Question 8

En np.linalg.norm(points − query, ord=2, axis=1), ¿qué significa axis=1 cuando points tiene forma (number_of_points, number_of_features)?

Show the step-by-step solution

Cada fila de points − query es un desplazamiento candidato y cada columna es una coordenada de característica. Establecer axis=1 indica a NumPy que reduzca sobre las columnas de cada fila. Por tanto, el resultado tiene un valor L2 por candidato, con forma (number_of_points,). Reducir sobre el eje equivocado mezclaría los candidatos o devolvería un valor por característica en lugar de una clasificación de vecinos utilizable.

Fuentes

  1. Mathematics for Machine Learning book PDF, Section 3.3
  2. NumPy documentation: numpy.linalg.norm
  3. scikit-learn documentation: NearestNeighbors
  4. scikit-learn documentation: pairwise metrics, affinities, and kernels
  5. Beyer, Goldstein, Ramakrishnan, and Shaft: When Is Nearest Neighbor Meaningful?