Este post fue evaluado por especialistas así se asegura la exactitud de nuestra esta sección.
Solución:
TLDR: la distancia del coseno es equivalente a la distancia euclidiana cuando los vectores de entrada están normalizados, lo que resuelve su problema aquí.
La semejanza del coseno no es una distancia…
Semejanza del coseno, generalmente definida como s: (x,y) ↦ xT y / (||x|| * ||y||), mide la colinealidad de xey. En particular:
- s(x,y) = 1 si los vectores x e y tienen la misma dirección
- s(x,y) = -1 si x e y tienen direcciones opuestas
- s(x,y) = 0 si x e y son ortogonales
Esto no define una distancia, ya que para todo x, s(x,x) = 1 (debería ser igual a 0 para una distancia). Intuitivamente, uno puede derivar la llamada “distancia del coseno” de la similitud del coseno: d: (x,y) ↦ 1 – s(x,y). Sin embargo, esto todavía no es una distancia en general ya que no tiene la propiedad de desigualdad triangular. Por lo tanto, no puede usarlo para acelerar estructuras como árboles de bolas y kd.
… pero se puede vincular a la distancia euclidiana cuando las entradas se normalizan
Si fuerza a scikit-learn a usar el enfoque de fuerza bruta, debería poder derivar los vecinos más cercanos usando su propio objeto métrico de distancia personalizado. Sin embargo, existen métodos para transformar la similitud del coseno en una métrica de distancia válida si desea utilizar árboles de bolas (puede encontrar uno en la biblioteca JSAT).
Cuando x e y están normalizados (||x||2 = xTx = 1), sus distancias euclidiana y coseno están unidas por la siguiente igualdad: ||xy||2 = xTx + yTy − 2 xTy = 2 * (1 – xTy) = 2 * d(x,y). En este caso, la distancia del coseno hereda las buenas propiedades de la distancia euclidiana.
Por lo tanto, normalizar todos los vectores de entrada antes de usar un KNeighborsClassifier
con la distancia euclidiana arrojará resultados equivalentes a usar la distancia del coseno.
valoraciones y reseñas
Si haces scroll puedes encontrar las interpretaciones de otros creadores, tú aún eres capaz insertar el tuyo si te apetece.