¿Cuántas clases diferentes podemos tener prácticamente dentro de un conjunto de entrenamiento, mientras usamos el algoritmo KNN?

Hay bastante trabajo publicado sobre clasificación de datos con un gran número de clases, 700 es ciertamente posible. Por ejemplo, Deng et al. (2010) encuentran que KNN supera a los SVM cuando el número de clases distintas es grande, 7000+.

El tiempo de ejecución de KNN es independiente del número de clases, por lo que existe una ventaja computacional de usarlo cuando hay cientos, miles o millones de clases *.


*¿Por qué? Supongamos que tiene clases C y está utilizando K vecinos más cercanos: puede encontrar la clase mayoritaria de los K puntos de datos más cercanos en el tiempo O (K) manteniendo una matriz de longitud C que contenga los recuentos de histogramas para cada clase. llámelo A y mantenga un recuento máximo a medida que se completa este histograma.

Si llamamos al conjunto de vecinos más cercanos KNN y denotamos x_i, y_i como el valor respectivo y la clase del punto de datos i, entonces el siguiente código realiza la clasificación.

A = zero_array_of_length (C)
max_count = -inf
max_class = 0
para x_i, y_i en KNN:
A [y_i] + = 1
si A [y_i]> max_count:
max_count = A [y_i]
max_class = y_i
return max_class

Supongo que podemos inicializar una matriz en O (1) tiempo, lo cual es posible en la arquitectura moderna.

He leído que kNN no funciona bien debido al hecho de que en presencia de un conjunto grande (50k) y varias clases, el tiempo de ejecución es demasiado lento. Una forma de acelerarlo es usando kd-tree, ¿cuánto podría ser relevante la diferencia? Además, ¿cuál podría ser otro algoritmo que funcione igual de bien?