34 votos

Complejidad computacional de k-NN

¿Cuál es la complejidad temporal del k -¿algoritmo NN con enfoque de búsqueda ingenua (sin árbol k-d o similares)?

Me interesa su complejidad temporal considerando también el hiperparámetro k . He encontrado respuestas contradictorias:

  1. O(nd + kn), donde n es la cardinalidad del conjunto de entrenamiento y d la dimensión de cada muestra. [1]

  2. O(ndk), donde de nuevo n es la cardinalidad del conjunto de entrenamiento y d la dimensión de cada muestra. [2]

[1] http://www.csd.uwo.ca/courses/CS9840a/Lecture2_knn.pdf (Pag. 18/20)

[2] http://www.cs.haifa.ac.il/~rita/ml_course/lectures/KNN.pdf (Pag. 18/31)

40voto

RossC Puntos 3725

Suponiendo que $k$ es fija (como lo hacen las dos conferencias enlazadas), entonces sus elecciones algorítmicas determinarán si su cálculo toma $O(nd+kn)$ en tiempo de ejecución o $O(ndk)$ tiempo de ejecución.

En primer lugar, consideremos un $O(nd+kn)$ algoritmo en tiempo de ejecución:

  • Inicializar $selected_i = 0$ para todas las observaciones $i$ en el conjunto de entrenamiento
  • Para cada observación del conjunto de entrenamiento $i$ , computa $dist_i$ la distancia entre la nueva observación y la observación del conjunto de entrenamiento $i$
  • Para $j=1$ a $k$ : Recorre todas las observaciones del conjunto de entrenamiento, seleccionando el índice $i$ con el más pequeño $dist_i$ y para el que $selected_i=0$ . Seleccione esta observación ajustando $selected_i=1$ .
  • Devuelve el $k$ índices seleccionados

Cada cálculo de distancia requiere $O(d)$ tiempo de ejecución, por lo que el segundo paso requiere $O(nd)$ tiempo de ejecución. Para cada iteración en el tercer paso, realizamos $O(n)$ funcionan mediante un bucle a través de las observaciones del conjunto de entrenamiento, por lo que el paso en general requiere $O(nk)$ trabajo. El primer y el cuarto paso sólo requieren $O(n)$ trabajo, por lo que obtenemos un $O(nd+kn)$ tiempo de ejecución.

Ahora, consideremos un $O(ndk)$ algoritmo en tiempo de ejecución:

  • Inicializar $selected_i = 0$ para todas las observaciones $i$ en el conjunto de entrenamiento
  • Para $j=1$ a $k$ : Recorre todas las observaciones del conjunto de entrenamiento y calcula la distancia $d$ entre la observación del conjunto de entrenamiento seleccionado y la nueva observación. Seleccione el índice $i$ con el más pequeño $d$ valor para el que $selected_i=0$ . Seleccione esta observación ajustando $selected_i=1$ .
  • Devuelve el $k$ índices seleccionados

Para cada iteración en el segundo paso, calculamos la distancia entre la nueva observación y cada observación del conjunto de entrenamiento, lo que requiere $O(nd)$ trabajo para una iteración y por lo tanto $O(ndk)$ trabajo en general.

La diferencia entre los dos algoritmos es que el primero precalcula y almacena las distancias (requiriendo $O(n)$ memoria extra), mientras que el segundo no. Sin embargo, dado que ya almacenamos todo el conjunto de entrenamiento, se requiere $O(nd)$ memoria, así como la $selected$ vector, que requiere $O(n)$ el almacenamiento de los dos algoritmos es asintóticamente el mismo. Como resultado, el mejor tiempo de ejecución asintótico para $k > 1$ hace más atractivo el primer algoritmo.

Cabe destacar que es posible obtener un $O(nd)$ tiempo de ejecución mediante una mejora algorítmica:

  • Para cada observación del conjunto de entrenamiento $i$ , computa $dist_i$ la distancia entre la nueva observación y la observación del conjunto de entrenamiento $i$
  • Ejecutar el algoritmo quickselect para calcular el $k^{th}$ la menor distancia en $O(n)$ tiempo de ejecución
  • Devuelve todos los índices no mayores que el calculado $k^{th}$ la menor distancia

Este enfoque aprovecha el hecho de que existen enfoques eficientes para encontrar el $k^{th}$ valor más pequeño de una matriz no ordenada.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X