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:
- ¿Todavía se usa el Método de Desarrollo de Viena, o ha sido reemplazado por métodos más modernos?
- Cómo solucionar el problema de internet de mi computadora portátil
- A medida que comenzamos a planificar la próxima edición de Introducción a los algoritmos (CLRS), ¿qué debemos agregar y qué debemos eliminar si la cuarta edición no puede ser más grande que la tercera?
- ¿Cómo comenzar a hacer un mini proyecto en el segundo año de CSE? ¿Cuáles son los pasos a seguir para hacer un mini proyecto?
- ¿Cuál es el mejor sistema operativo en caso de seguridad?
- 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