¿Qué es mejor, el algoritmo de vecinos más cercanos a k (k-NN) o el clasificador de máquina de vectores de soporte (SVM)? ¿Qué algoritmo se usa principalmente en la práctica? ¿Qué algoritmo garantiza una detección confiable en situaciones impredecibles?

¿Qué es mejor? Depende.

¿Qué algoritmo se usa principalmente en la práctica? Yo diría que SVM, es muy popular.

Ahora algunos comentarios sobre esas respuestas rápidas:

KNN tiene algunas buenas propiedades: es automáticamente no lineal, puede detectar datos distribuidos lineales o no lineales, tiende a funcionar muy bien con muchos puntos de datos.

En el lado negativo, KNN debe ajustarse cuidadosamente, la elección de K y la métrica (distancia) a utilizar son críticas. Como Michal Illich mencionó para muchos puntos de datos, KNN tiene problemas de rendimiento. Si se encuentra en un espacio dimensional muy bajo, puede usar un RP-Tree o KD-Tree para mejorar el rendimiento, si tiene un mayor número de dimensiones, entonces necesita una aproximación a los problemas de los vecinos más cercanos y siempre que usemos una aproximación tenemos pensar si KNN con la aproximación NN es aún mejor que otros algoritmos.

KNN también es muy sensible a las características malas (atributos), por lo que la selección de características también es importante. KNN también es sensible a los valores atípicos y eliminarlos antes de usar KNN tiende a mejorar los resultados.

SVM se puede utilizar de forma lineal o no lineal con el uso de un Kernel, cuando tiene un conjunto limitado de puntos en muchas dimensiones, SVM tiende a ser muy bueno porque debería ser capaz de encontrar la separación lineal que debería existir. SVM es bueno con valores atípicos, ya que solo usará los puntos más relevantes para encontrar una separación lineal (vectores de soporte)

SVM necesita ser ajustado, el costo “C” y el uso de un núcleo y sus parámetros son hiperparámetros críticos para el algoritmo.

Entonces, hacer algo útil de este desastre:

– Si tiene muchos puntos en un espacio de baja dimensión, entonces KNN es probablemente una buena opción.

– Si tiene algunos puntos en un espacio dimensional alto, entonces un SVM lineal es probablemente mejor.

Lo más probable es que esté en el medio del camino y eso significa que cualquiera de los algoritmos puede proporcionar la mejor solución.

Finalmente preguntaste sobre situaciones impredecibles, en ese caso creo que un SVM con un kernel RBF o un bosque aleatorio son tus mejores opciones, ya que tienden a funcionar bastante bien en promedio. Alguien mencionará el NFL (sin teorema del almuerzo gratis) y dirá que si no conocemos los datos, entonces no sabemos qué algoritmo funcionará mejor, pero eso solo es cierto si consideramos TODOS los posibles problemas de optimización, teniendo en cuenta que La mayoría de los problemas de optimización son solo un pequeño subconjunto del conjunto, entonces es válido decir que algunos algoritmos serán mejores que otros en promedio, por lo que en tales casos elegiría un SVM o un bosque aleatorio.

Luis

Para la mayoría de los problemas prácticos, KNN es una mala elección.

Debido a que se escala mal: si tiene un millón de ejemplos etiquetados, tomaría mucho tiempo (lineal para el número de ejemplos) encontrar K vecinos más cercanos.

Dos soluciones:

– use k-means en su lugar

– o si realmente insiste en KNN, use ANN (vecinos más cercanos aproximados) que generalmente es 10x – 100x más rápido, con un impacto insignificante en la precisión


SVM funciona de manera diferente y es una solución buena y rápida para muchos problemas.

En general: solo pruébelo en su conjunto de datos. Ambos algoritmos tienen una excelente implementación de código abierto, por lo que generalmente es cuestión de una hora probarlo.

“¿Qué algoritmo se usa principalmente en la práctica?”. Ambos son usados. KNN es más intuitivo, pero KNN también puede ser más lento en caso de que el valor de K se mantenga alto o el número total de puntos sea alto. (Esto podría mejorarse utilizando KD-tree u otros algoritmos similares)
“¿Qué algoritmo garantiza una detección confiable en situaciones impredecibles?” Eso depende de los datos. Si los puntos de datos están distribuidos de manera heterogénea, ambos deberían funcionar bien. Si los datos son homogéneos a la vista, uno podría clasificar mejor al poner un núcleo inteligente en el SVM.

Según tengo entendido, k-Nearest Neighbour es un algoritmo muy simple para comenzar con los conceptos. Es muy intuitivo entender por qué se usa. Nos permite comprender el problema de clasificación en sí mismo al no entrar en algos complejos.

Tradicionalmente, se podría haber usado k-NN, pero ahora no es el algoritmo más avanzado para la clasificación.

A menos que el problema que está resolviendo sea muy simple, SVM superará a k-NN casi siempre.