Distancias entre dos puntos
Diferentes Distancias entre dos Puntos
En matemáticas y ciencia de datos, existen varias formas de calcular la distancia entre dos puntos. Cada una de estas medidas tiene aplicaciones específicas dependiendo del tipo de datos y del problema que se quiera resolver. A continuación, te explico las distancias más comunes, sus propiedades, ejemplos y cómo calcularlas en Python.
1. Distancia Euclidiana
La distancia euclidiana es la más común y se refiere a la distancia “en línea recta” entre dos puntos en un espacio n-dimensional. Es la distancia geométrica habitual en un espacio euclidiano.
Fórmula:
Para dos puntos ( P = (x_1, y_1) ) y ( Q = (x_2, y_2) ) en un espacio 2D:
Para puntos en un espacio n-dimensional:
Propiedades:
- Es simétrica: ( d(P, Q) = d(Q, P) ).
- Siempre positiva o cero: ( d(P, Q) \geq 0 ), y solo es cero si los dos puntos son idénticos.
- Cumple la desigualdad triangular: ( d(P, R) \leq d(P, Q) + d(Q, R) ).
Ejemplo de Aplicación:
Se usa comúnmente en problemas de clasificación (como k-NN) y en la geometría para calcular la distancia más corta entre dos puntos.
Ejemplo en Python:
import numpy as np
from scipy.spatial import distance
# Definir dos puntos en 2D
P = np.array([1, 2])
Q = np.array([4, 6])
# Calcular la distancia euclidiana
distancia_euclidiana = np.linalg.norm(P - Q)
print(f"Distancia euclidiana: {distancia_euclidiana}")
distancia = distance.euclidean(punto1, punto2)
2. Distancia de Manhattan
La distancia de Manhattan (también llamada distancia de la “cuadra” o “city block”) es la suma de las diferencias absolutas de sus coordenadas. Se llama así porque refleja el tipo de distancia que recorrería un taxi en una cuadrícula de calles, como en Manhattan.
Fórmula:
Para dos puntos ( P = (x_1, y_1) ) y ( Q = (x_2, y_2) ) en un espacio 2D:
d(P, Q) = |x_2 – x_1| + |y_2 – y_1|
Para puntos en un espacio n-dimensional:
[ d(P, Q) = \sum_{i=1}^{n} |q_i – p_i| ]
Propiedades:
- Es simétrica.
- Es siempre positiva o cero.
- No se preocupa por la distancia en línea recta, sino por las distancias en cada dimensión individual.
Ejemplo de Aplicación:
Es útil en problemas donde el movimiento se restringe a seguir un camino recto, como en el diseño de circuitos o en mapas de ciudades.
Ejemplo en Python:
# Calcular la distancia de Manhattan
distancia_manhattan = np.sum(np.abs(P - Q))
print(f"Distancia de Manhattan: {distancia_manhattan}")
distancia = distance.cityblock(P,Q)
3. Distancia de Chebyshev
La distancia de Chebyshev mide la distancia máxima entre dos puntos a lo largo de cualquier dimensión. En un tablero de ajedrez, esta distancia corresponde al número mínimo de movimientos que necesita el rey para moverse entre dos casillas.
Fórmula:
Para dos puntos ( P = (x_1, y_1) ) y ( Q = (x_2, y_2) ):
[ d(P, Q) = \max(|x_2 – x_1|, |y_2 – y_1|) ]
Para un espacio n-dimensional:
[ d(P, Q) = \max_{i} |q_i – p_i| ]
Propiedades:
- Es simétrica.
- Tiene aplicaciones en escenarios donde se mide la “distancia de paso máximo”.
- Se adapta bien a problemas donde el movimiento diagonal es permitido y cuenta como una unidad de distancia.
Ejemplo de Aplicación:
Se usa en análisis de tableros de ajedrez, problemas de logística, y algunas variantes de redes neuronales.
Ejemplo en Python:
# Calcular la distancia de Chebyshev
distancia_chebyshev = np.max(np.abs(P - Q))
print(f"Distancia de Chebyshev: {distancia_chebyshev}")
distancia = distance.chebyshev(P,Q)
4. Distancia de Minkowski
La distancia de Minkowski es una generalización de las distancias Euclidiana y de Manhattan. Depende de un parámetro ( p ), que define el tipo de distancia.
Fórmula:
Para dos puntos ( P = (x_1, y_1) ) y ( Q = (x_2, y_2) ):
[ d(P, Q) = \left( \sum_{i=1}^{n} |q_i – p_i|^p \right)^{1/p} ]
- Si ( p = 2 ), es la distancia euclidiana.
- Si ( p = 1 ), es la distancia de Manhattan.
- Si ( p \to \infty ), es la distancia de Chebyshev.
Propiedades:
- Permite ajustar el parámetro ( p ) para cambiar el tipo de métrica utilizada.
- Para ( p = 1 ), es similar a Manhattan; para ( p = 2 ), es similar a Euclidiana.
Ejemplo de Aplicación:
Es útil cuando queremos probar diferentes métricas de distancia en un problema de clasificación o clustering.
Ejemplo en Python:
# Calcular la distancia de Minkowski con p=3
p = 3
distancia_minkowski = np.sum(np.abs(P - Q)**p)**(1/p)
print(f"Distancia de Minkowski (p=3): {distancia_minkowski}")
distancia = distance.minkowski(P,Q)
Resumen de las Distancias
Distancia | Aplicación Principal |
---|---|
Euclidiana | Problemas geométricos y de clasificación (k-NN). |
Manhattan | Diseño de circuitos, mapas urbanos. |
Chebyshev | Movimiento en tableros de ajedrez, logística. |
Minkowski | Clasificación, clustering, cuando no se sabe qué métrica usar. |
Cada una de estas distancias tiene sus aplicaciones en diferentes campos de la ciencia de datos y matemática, y es importante elegir la que mejor se ajuste al problema específico que se quiere resolver.