Clasificación (aprendizaje automático): ¿Cuándo debo usar un clasificador K-NN sobre un clasificador Naive Bayes?

TLDR, lo que creo que son los factores más importantes de KNN vs NB:
KNN es malo si tiene demasiados puntos de datos y la velocidad es importante.
NB es malo si (lo sabe) no tener independencia condicional en sus datos tendrá una influencia muy negativa en la clasificación, o si (lo sabe) el límite de decisión no es lineal / no elíptico / no parabólico.


Algunas buenas respuestas han sido dadas por otros coroanos; Solo puedo pensar en tres ventajas más para KNN sobre NB:

  • El límite de decisión de KNN puede tomar cualquier forma
    Esto se debe a que KNN no es paramétrico, es decir, no supone nada sobre la distribución de datos. Contraste esto con NB, que supone que los atributos son condicionalmente independientes entre sí dada la clase, y que normalmente se distribuyen (para atributos con valores reales). Como resultado, NB solo puede tener límites de decisión lineales, elípticos o parabólicos, lo que hace que la flexibilidad del límite de decisión de KNN sea una gran ventaja. Pero, por supuesto, si sus datos son separables por cualquiera de las formas de los límites de decisión de NB, entonces KNN no ayudará mucho.
  • Bayes ingenuos pueden ser engañados por atributos correlacionados
    Imagina que tenemos dos atributos, A y B, y suponemos un problema de clasificación de dos clases. Suponga que P (A | C1) = P (A | C2) y P (B | C1) = P (B | C2); es decir, las distribuciones marginales de A y B en ambas clases son iguales. En este caso, NB no puede clasificar los puntos de datos, ya que depende de la distribución marginal de los atributos de la clase dada para hacer la clasificación. Si la característica distintiva para la clasificación no son las distribuciones marginales sino la correlación, entonces NB no será una buena opción. Un ejemplo es cuando en la clase 1 A se correlaciona positivamente con B mientras que en la clase 2 se correlacionan negativamente.
  • Bayes ingenuos pueden ser engañados por frecuencias cero
    Tiene un problema de frecuencia cero cuando no observa un atributo con valor de conteo para una clase en particular. Este es un problema común en la clasificación de texto, por ejemplo, usted ve muchas apariciones de la palabra “contraseña” en la clase de correo no deseado, pero no observa “contraseña” en la clase de correo no deseado. Como resultado, cualquier nuevo punto de datos que contenga un atributo de frecuencia cero siempre se clasificará como la otra clase, por ejemplo, cualquier correo electrónico que contenga “contraseña” siempre se clasificará como spam, siendo la razón P (contraseña | no spam) = 0. Existen soluciones simples para este problema, aunque, por ejemplo, Laplace o suavizado de add-one.

Además, aquí hay contras de KNN, por lo que sabrá cuándo no elegir KNN sobre NB:

  • KNN no sabe qué atributos son más importantes
    Al calcular la distancia entre los puntos de datos (generalmente la distancia euclidiana u otras generalizaciones de la misma), cada atributo normalmente pesa lo mismo que la distancia total. Esto significa que los atributos que no son tan importantes tendrán la misma influencia en la distancia en comparación con los atributos más importantes.
  • No paramétrico, y por lo tanto no tan interpretable como NB
    NB puede no ser el modelo más interpretable para la clasificación, pero podría decirse que es más interpretable que KNN. Con KNN realmente no puede responder preguntas como “¿Por qué este punto de datos se clasifica como clase A?” o “¿Cuál es la relación entre este atributo y la distribución de clases?”
  • No maneja los datos faltantes con gracia
    NB es uno de los clasificadores que maneja muy bien los datos faltantes: solo excluye el atributo con datos faltantes cuando se calcula la probabilidad posterior (es decir, la probabilidad del punto de datos dado por la clase). Con KNN, no puede hacer la clasificación si le faltan datos. La razón es que la distancia no está definida si falta uno o más de los atributos (que son esencialmente dimensiones), a menos que esté dispuesto a omitir estos atributos al calcular la distancia. Por lo tanto, debe confiar en soluciones comunes para datos faltantes, por ejemplo, imputar valores promedio.
  • Tiene que sintonizar K
    KNN tiene un parámetro más que NB: el número de vecinos K (NB no tiene ningún parámetro obvio). Esto significa que necesita hacer una selección de modelo para KNN para determinar la mejor K, ya sea con división de validación de entrenamiento o validación cruzada.
  • Lento durante la predicción (no entrenando)
    Como han señalado otros coroanos, definitivamente no debes usar KNN cuando tienes una gran cantidad de puntos de datos; aunque puede solucionar este problema un poco utilizando árboles KD, listas invertidas o hash. Qué ironía ya que KNN es asintóticamente correcto (siempre correcto si tienes infinitos puntos de datos sin ruido).

Fuentes:
KNN
nótese bien

Una diferencia básica entre el clasificador K-NN y el clasificador Naive Bayes es que el primero es un clasificador discriminativo pero el segundo es un clasificador generativo.

Para entrar en detalles, el clasificador K-NN es un clasificador perezoso supervisado que tiene heurística local. Al ser un clasificador perezoso, es difícil usar esto para la predicción en tiempo real. Los límites de decisión que logra con K-NN son mucho más complejos que cualquier árbol de decisión, por lo que obtiene una buena clasificación. Cuando está resolviendo un problema que se enfoca directamente en encontrar similitudes entre las observaciones, K-NN funciona mejor debido a su naturaleza inherente para optimizar localmente. Esto también es una desventaja porque, los valores atípicos pueden matar significativamente el rendimiento. Además, es muy probable que K-NN se sobreajuste y, por lo tanto, ajustar ‘k’ para maximizar el rendimiento del conjunto de pruebas es el camino a seguir. A medida que crece la complejidad del espacio, la precisión de K-NN disminuye y necesitaría más datos, pero el orden de este clasificador es n ^ 2 y se vuelve demasiado lento. Por lo tanto, normalmente se aplica una técnica de reducción de dimensionalidad como PCA, SVD, etc. y posteriormente se utiliza este clasificador.

Naive Bayes es un clasificador de aprendizaje entusiasta y es mucho más rápido que K-NN. Por lo tanto, podría usarse para la predicción en tiempo real. Por lo general, el filtrado de correo no deseado utiliza el clasificador Naive Bayes. Toma una ruta de estimación probabilística y genera probabilidades para cada clase. Asume independencia condicional entre las características y utiliza una hipótesis de máxima verosimilitud. La mejor parte de este clasificador es que aprende con el tiempo. En una tarea de filtrado de spam, el tipo de palabras de spam en el correo electrónico evoluciona con el tiempo. De la misma manera, el clasificador también calcula estimaciones de probabilidad para las palabras de spam que aparecen recientemente en un modelo de “bolsa de palabras” y se asegura de que funcione bien. Esta característica del clasificador se debe a que la naturaleza inherente del algoritmo es generativa pero no discriminatoria.

El clasificador KNN se puede usar cuando su conjunto de datos es lo suficientemente pequeño, de modo que el Clasificador KNN completa la ejecución en un tiempo más corto. En general, la complejidad de KNN Classifier en notación Big Oh es [matemática] n ^ 2 [/ matemática] donde n es el número de puntos de datos. Por lo tanto, cuando aumenta el tamaño de los datos, el KNN-Classifier simple sin ningún tipo de pirateo suele ser inútil. El clasificador KNN basado en KDTree puede ayudar un poco, pero lo mejor que puede hacer es [math] log (n) [/ math]. Pero el aprendizaje de NaiveBayes es solo contar y calcular las probabilidades. La complejidad para aplicar un modelo Naive bayes es [matemática] o (1) [/ matemática]. Entonces, a pesar de que KNN funciona mejor para sus datos, cuando sepa que su tamaño de datos seguirá aumentando, es aconsejable elegir Naive Bayes.

En general, debe hacer lo que sugirió Andriy Burkov. Solo intentaré elaborar un poco más y:

  • Utilice la validación cruzada (estadísticas) en su conjunto de entrenamiento. Use el que tenga la mejor solución;
  • Considere el tiempo de tiempo de respuesta, si el KNN es lo suficientemente bueno para usted, elija el mejor, de lo contrario, consulte la siguiente explicación.

Pero aún así, K-NN es O (n), y Naive Bayes es casi O (1). Entonces, si el KNN tiene una tasa de clasificación más alta, debe tener en cuenta el tamaño del conjunto de entrenamiento y el tiempo de respuesta actual (¿es lo suficientemente bueno para su aplicación?).

Si el tiempo de respuesta de K-NN no es lo suficientemente bueno, intente utilizar una técnica de reducción de instancias (selección de prototipos y generación de prototipos) y luego vuelva a ejecutar la prueba, por lo general, las técnicas de IR mejoran la precisión de los clasificadores KNN y disminuyen el tiempo de clasificación.

Vea esta respuesta en IR: ¿Cuáles son los métodos de selección de instancia discriminativa para conjuntos de datos a gran escala?

Espero que ayude.