16 · Naive Bayes: Gaussiano, Multinomial y Bernoulli
Aplica el teorema de Bayes con un supuesto simplificador — independencia de características dado la clase — y obtén un clasificador ultrarrápido que domina los problemas de texto.
Aplica el teorema de Bayes asumiendo que las características son condicionalmente independientes dado la clase — rápido, sorprendentemente competitivo y el caballo de batalla de los filtros de spam.
Sin esto:
Sin él te perderías un clasificador extremadamente rápido y especialmente potente para clasificación de texto y documentos.
La mayoría de los clasificadores aprendidos hasta ahora son discriminativos — aprenden la frontera P(y|x) directamente de los datos. Naive Bayes invierte el enfoque y es generativo: modela cómo se generan los datos por clase, luego usa el teorema de Bayes para inferir la clase a partir de los datos.
El teorema de Bayes aplicado a clasificación
Para un nuevo punto x y una etiqueta de clase y:
P(y | x) = P(x | y) · P(y) / P(x)
Dado que P(x) es igual para todas las clases, la regla de decisión se simplifica a elegir la clase que maximice el numerador:
ŷ = argmax_y P(x | y) · P(y)
- P(y) es el prior — la frecuencia de clase en datos de entrenamiento.
- P(x | y) es la verosimilitud — ¿qué tan probables son estos valores de características para la clase y?
- P(y | x) es el posterior — lo que realmente queremos.
El supuesto "naive"
Calcular P(x | y) para un vector x de d dimensiones requiere estimar una distribución conjunta d-dimensional — exponencialmente costoso. Naive Bayes evita esto asumiendo que las características son condicionalmente independientes dado la clase:
P(x | y) = P(x₁ | y) · P(x₂ | y) · … · P(xd | y) = ∏ P(xᵢ | y)
Esto casi nunca es literalmente cierto, pero la simplificación hace que el entrenamiento sea O(n · d) — trivialmente rápido — y las predicciones suelen ser sorprendentemente competitivas.
Tres variantes de sklearn
| Variante | Supuesto sobre P(xᵢ | y) | Uso típico | |---|---|---| | GaussianNB | Cada característica sigue una Gaussiana 1-D por clase | Características continuas (ej. Iris, médico) | | MultinomialNB | Conteos de características siguen una Multinomial | Conteos de palabras, vectores TF | | BernoulliNB | Características binarias siguen una Bernoulli | Bag-of-words binario, detección de spam |
Perspectiva sesgo-varianza
El supuesto de independencia introduce alto sesgo (el modelo está equivocado sobre las correlaciones), pero como el modelo tiene muy pocos parámetros (2 por característica por clase para GaussianNB), la varianza es baja y las predicciones son estables.
La lección mml-34 cubre la Regla de la Suma, la Regla del Producto y el teorema de Bayes desde los fundamentos — las identidades exactas que sustentan Naive Bayes. Revísala si la derivación P(y|x) = P(x|y)·P(y)/P(x) no te resulta clara.
Python (in browser)
`model.theta_` almacena las medias de características por clase μ_{y,j}; `model.var_` almacena las varianzas por clase σ²_{y,j}. Estos dos arrays definen completamente la verosimilitud de GaussianNB: P(xᵢ | y) = N(xᵢ; μ_{y,i}, σ²_{y,i}). El entrenamiento es simplemente calcular medias y varianzas por columna para cada clase — O(n·d).
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`MultinomialNB` modela cada característica (palabra) como un conteo extraído de una distribución multinomial parametrizada por clase. `alpha` es la constante de suavizado de Laplace — añade `alpha` pseudo-conteos a cada palabra antes de calcular las log probabilidades. `alpha=1.0` es el default más común.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
La frontera de GaussianNB es una sección cónica (parábola / elipse) porque modela Gaussianas condicionales por clase. Cuando ambas clases tienen la misma covarianza, la frontera degenera a una línea recta — idéntica a LDA y cercana a la regresión logística. El compromiso clave: NB es casi instantáneo de entrenar y actualizar con nuevos datos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
El supuesto de independencia hace que NB cuente doble la evidencia correlacionada, pero el ranking de clases suele seguir siendo correcto. Por eso la precisión de NB puede ser buena incluso cuando sus probabilidades de salida no están bien calibradas.
Si dos características están perfectamente correlacionadas, Naive Bayes:
- Naive Bayes aplica el teorema de Bayes con el supuesto de independencia condicional: P(x|y) = ∏ P(xᵢ|y). El entrenamiento es O(n·d) — tan rápido como puede ser.
- GaussianNB modela características continuas como Gaussianas por clase; MultinomialNB usa distribuciones de conteo; BernoulliNB maneja características binarias.
- Las características correlacionadas hacen que NB cuente doble la evidencia — las probabilidades se vuelven demasiado confiadas, pero los rankings suelen seguir siendo correctos.
- Las probabilidades de NB NO están calibradas. Usa CalibratedClassifierCV si necesitas puntuaciones de probabilidad confiables, no solo predicciones de clase.
- MultinomialNB con suavizado de Laplace (alpha=1.0) es una baseline fuerte y rápida para clasificación de texto — siempre pruébala antes de modelos más pesados.
Filtros de spam de correo electrónico; categorización de documentos; baseline predeterminado de sklearn para problemas de texto; ancestro conceptual de los clasificadores generativos modernos.
Si lo quitas: Te perderías el clasificador de entrenamiento más rápido — útil para baselines de prototipo y aprendizaje en línea.