
K‑NN y Naive Bayes
Dos clasificadores clásicos, simples y efectivos, que funcionan por razones completamente distintas
En clasificación hay modelos que aprenden fronteras complejas, como las SVM o los árboles. Aprenden, ajustan, optimizan. Y luego están K‑NN y Naive Bayes, dos enfoques radicalmente diferentes entre sí, pero igual de útiles cuando quieres algo rápido de entender, fácil de implementar y sorprendentemente competitivo en muchos problemas reales.
Lo interesante es por qué funcionan, porque lo hacen desde filosofías opuestas. Uno razona con geometría (¿quién se te parece?) y el otro con probabilidad (¿qué es más probable?). Entender esa diferencia es entender media asignatura de clasificación. Vamos directo al punto.

K‑NN: clasificar por vecindad
Empecemos por una imagen. Imagina que llegas nuevo a una ciudad y quieres saber si un barrio es tranquilo o ruidoso. ¿Qué haces? Miras a tus vecinos más cercanos. Si los cinco de al lado dicen que es tranquilo, apuestas por tranquilo. No necesitas un estudio urbanístico ni un modelo estadístico: te fías de quién tienes cerca.
Eso es exactamente K‑NN, y por eso es tan intuitivo.
Lo primero que sorprende de K‑NN (K‑Nearest Neighbors) es que no entrena nada. No aprende pesos, no ajusta coeficientes, no optimiza una función de pérdida. Por eso se le llama un modelo perezoso (lazy learner): no hace ningún trabajo por adelantado, simplemente guarda todos los datos y espera. Todo el esfuerzo lo hace en el momento de predecir.
Cuando le llega un punto nuevo, hace una sola cosa:
Busca los K puntos más cercanos del dataset y vota la clase mayoritaria.
Así de simple.
Un ejemplo numérico
Imagina que clasificas fruta como manzana o naranja según dos características: peso y rugosidad de la piel. Llega una fruta nueva y calculas sus 5 vecinos más cercanos:
| Vecino | Distancia | Clase |
|---|---|---|
| 1 | 0.8 | Manzana |
| 2 | 1.1 | Naranja |
| 3 | 1.3 | Manzana |
| 4 | 1.6 | Manzana |
| 5 | 1.9 | Naranja |
Con K = 5, contamos: 3 manzanas frente a 2 naranjas. Gana manzana. Fin. No hay más magia que contar votos entre los vecinos.
¿Cómo decide quién es «cercano»?
Usa una métrica de distancia. Las más habituales:
- Euclidiana: la distancia «en línea recta» de toda la vida. La opción por defecto.
- Manhattan: suma las diferencias eje por eje, como moverse por las calles de una ciudad en cuadrícula.
- Coseno: mide el ángulo entre dos vectores, no su longitud. Es la reina cuando trabajas con texto o embeddings.
El parámetro K: el mando del sobreajuste
El valor de K controla cuánto «detalle» mira el modelo, y elegirlo bien es casi todo el juego:
- K = 1: el modelo copia la clase del vecino más cercano. Rápido, pero muy sensible al ruido: un solo dato mal etiquetado puede arruinarte la predicción.
- K grande: la frontera se suaviza. Menos sobreajuste, pero más riesgo de ignorar detalles finos y difuminar las clases pequeñas.
Un truco práctico: usa siempre un K impar en problemas de dos clases, para evitar empates en la votación.
Ventajas
- No requiere entrenamiento.
- Funciona bien con fronteras complejas y no lineales.
- Muy intuitivo y fácil de explicar.
- Excelente como baseline: si tu modelo sofisticado no le gana a K‑NN, algo va mal.
Desventajas
- Lento con muchos datos: cada predicción obliga a recorrer todo el dataset buscando vecinos.
- Sensible a la escala de las variables: si una variable va de 0 a 1 y otra de 0 a 10.000, la segunda domina la distancia. Por eso normalizar es obligatorio.
- Sufre la maldición de la dimensionalidad (curse of dimensionality): en muchas dimensiones, todos los puntos acaban pareciendo igual de lejanos y el concepto de «vecino cercano» pierde sentido.
Naive Bayes: clasificar por probabilidad
Naive Bayes es lo contrario a K‑NN. No mira vecinos, no calcula distancias, no busca patrones geométricos. En vez de eso, razona como un detective: reúne pistas y calcula qué explicación es más probable.
Piensa en un médico ante un paciente con fiebre, tos y dolor de garganta. No mide «distancias»: piensa «dados estos síntomas, ¿qué enfermedad es más probable?». Combina la frecuencia general de cada enfermedad con la probabilidad de que cada una produzca esos síntomas. Eso es Naive Bayes.
Formalmente, el modelo estima la probabilidad de cada clase dadas las características:
Y lo hace con el teorema de Bayes:
Leído en cristiano, cada pieza tiene un nombre y un significado muy concreto:
- $P(C)$ es el prior: cómo de común es la clase de partida (¿cuántos correos son spam en general?).
- $P(X \mid C)$ es la verosimilitud: cómo de probable es ver estas características si fuera esa clase (¿aparece la palabra «gratis» en el spam?).
- $P(C \mid X)$ es el posterior: lo que queremos, la probabilidad de la clase una vez vistas las pistas.
¿Por qué se llama «naive» (ingenuo)?
Porque hace una suposición muy fuerte, casi descarada:
Todas las características son independientes entre sí.
Es decir, asume que la palabra «gratis» y la palabra «oferta» en un correo aparecen sin relación alguna, cuando en realidad suelen ir de la mano. Esa suposición casi nunca es cierta en el mundo real. De ahí lo de ingenuo.
¿Y por qué funciona tan bien si la suposición es falsa?
Esta es la parte fascinante. Aunque las probabilidades individuales estén mal calculadas por ignorar las correlaciones, para clasificar no necesitamos la probabilidad exacta: solo necesitamos que la clase correcta salga con la probabilidad más alta. Y para eso, la independencia aproximada suele bastar. El resultado es un modelo:
- rapidísimo,
- estable incluso con pocos datos,
- y sorprendentemente preciso, sobre todo en texto.
Un ejemplo numérico (detección de spam)
Supón que quieres clasificar un correo que contiene la palabra «gratis». Sabes que:
- El 40% de los correos son spam → $P(\text{spam}) = 0.4$
- El 80% de los correos spam contienen «gratis» → $P(\text{gratis} \mid \text{spam}) = 0.8$
- Solo el 10% de los correos normales contienen «gratis» → $P(\text{gratis} \mid \text{no spam}) = 0.1$
Comparamos los dos caminos (numeradores de Bayes):
- Spam: $0.4 \times 0.8 = 0.32$
- No spam: $0.6 \times 0.1 = 0.06$
Como 0.32 es mucho mayor que 0.06, el modelo clasifica el correo como spam. Y fíjate: ni siquiera hizo falta calcular el denominador, porque solo nos importa cuál gana.
Variantes comunes
Naive Bayes viene en varios sabores según el tipo de datos:
- Gaussian NB → para datos continuos (asume que siguen una campana de Gauss).
- Multinomial NB → para texto con conteos de palabras (bolsa de palabras). Es el clásico del filtrado de spam.
- Bernoulli NB → para variables binarias (la palabra aparece o no aparece).
Ventajas
- Extremadamente rápido de entrenar y de predecir.
- Funciona muy bien en texto: clasificación de correos, sentimiento, temas.
- Requiere muy pocos datos para dar resultados decentes.
- Da probabilidades directamente, no solo una etiqueta.
Desventajas
- La suposición de independencia rara vez se cumple del todo.
- No captura interacciones entre variables.
- Genera fronteras relativamente simples.
- Sufre con palabras/categorías nunca vistas (se resuelve con el suavizado de Laplace, un pequeño ajuste que evita multiplicar por cero).
Dos filosofías opuestas, de un vistazo
Antes de comparar cuándo usar cada uno, vale la pena ver de golpe lo distintos que son por dentro:


Uno se pregunta «¿a quién me parezco?». El otro, «¿qué es más probable que sea?». Misma meta, caminos opuestos.
K‑NN vs Naive Bayes: cuándo usar cada uno
| Situación | Mejor opción |
|---|---|
| Datos con estructura geométrica | K‑NN |
| Texto, emails, documentos | Naive Bayes |
| Dataset pequeño | Ambos |
| Dataset grande | Naive Bayes |
| Fronteras complejas y no lineales | K‑NN |
| Necesitas velocidad extrema en predicción | Naive Bayes |
| Variables muy correlacionadas | K‑NN |
| Muchísimas dimensiones (p. ej. miles de palabras) | Naive Bayes |
La regla mental rápida: si tus datos «viven en un espacio» donde la cercanía tiene sentido, tira de K‑NN. Si tienes muchas características tipo conteo (sobre todo texto) y quieres algo instantáneo, tira de Naive Bayes.
En resumen
- K‑NN clasifica por vecindad: guarda los datos, busca los K puntos más cercanos y vota. No entrena, todo el trabajo lo hace al predecir.
- Naive Bayes clasifica por probabilidad: aplica el teorema de Bayes suponiendo (ingenuamente) que las variables son independientes.
- Ambos son simples, rápidos y excelentes como baseline antes de pasar a modelos más pesados.
- Brillan en contextos distintos: K‑NN para geometría, Naive Bayes para texto.
- Y lo mejor: entender estos dos te da la intuición de las dos grandes familias de la clasificación (basada en distancia y basada en probabilidad) antes de saltar a modelos más complejos.

