¿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:
- ¿Cuál es la diferencia entre análisis de datos, ciencia de datos, big data y aprendizaje automático?
- Cómo utilizar una GPU en mis algoritmos de aprendizaje automático de R
- ¿Cuál es la diferencia entre un sistema recomendado basado en la utilidad del sistema y un sistema recomendado basado en el contenido del sistema?
- ¿Cuáles son sus 5 mejores técnicas empíricas para detectar BS?
- ¿Cuál es el resultado de un modelo de omisión de gramo en Word2Vec?
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