Naive Bayes
Los clasificadores Naive Bayes aplican el teorema de Bayes y suponen que las características son independientes dada la clase. Descubre sus variantes, el filtrado de spam, sus límites y el código de Python.
Naive Bayes es una familia de clasificadores probabilísticos que aplica el teorema de Bayes bajo el supuesto «ingenuo» de que, una vez conocida la clase, las características son independientes entre sí. Este supuesto permite aprender por separado la distribución de cada característica dentro de cada clase, así que el entrenamiento consiste en un único recuento de los datos de entrenamiento y la predicción combina unas pocas probabilidades almacenadas. Mehran Sahami y sus colegas lo aplicaron al correo basura en 1998; los filtros de spam bayesianos basados en este método se extendieron a principios de la década de 2000, y sigue siendo una referencia rápida y sólida en el aprendizaje supervisado de texto y otros datos de dimensionalidad muy alta.
Cómo funciona Naive Bayes#
El teorema de Bayes permite calcular la probabilidad de una clase C dadas las características x₁ … xₙ: P(C | x) = P(C)·P(x | C) / P(x). Estimar P(x | C) para cada combinación de valores de las características requeriría un conjunto de datos enorme, así que Naive Bayes supone independencia condicional y descompone la expresión en P(x₁ | C)·P(x₂ | C)·…·P(xₙ | C). El clasificador predice la clase cuyo producto de la probabilidad a priori P(C) por ese resultado sea mayor, y omite P(x), que es igual para todas las clases. Las implementaciones suman logaritmos de probabilidades en lugar de multiplicar probabilidades, ya que el producto de miles de números pequeños provoca un subdesbordamiento en la aritmética de coma flotante.
El recuento genera un modo de fallo: una palabra que nunca ha aparecido con una clase durante el entrenamiento obtiene una probabilidad de cero, lo que anula la probabilidad de esa clase para cualquier documento que la contenga, sea cual sea el resto de las evidencias. El suavizado aditivo lo evita al añadir un pseudorrecuento α a cada recuento; α = 1 corresponde al suavizado de Laplace y es el valor predeterminado en scikit-learn.
Tipos de clasificadores Naive Bayes#
Las variantes se diferencian en la distribución que presuponen para cada característica dentro de una clase. Naive Bayes multinomial modela recuentos, como la frecuencia con que aparece cada palabra en un documento, y es la opción habitual para texto. Naive Bayes de Bernoulli modela la presencia o ausencia binaria y también penaliza la ausencia de palabras típicas de una clase. Naive Bayes gaussiano ajusta una distribución normal, con su propia media y varianza, a cada característica continua de cada clase. Naive Bayes complementario estima las estadísticas de palabras de cada clase a partir de todas las demás clases, por lo que resulta adecuado para conjuntos de datos de texto desequilibrados; Naive Bayes categórico gestiona características que adoptan valores de un conjunto fijo de categorías.
Este ejemplo entrena MultinomialNB de scikit-learn con los recuentos de palabras de seis mensajes etiquetados y calcula la puntuación de otros dos:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
# Tiny labeled corpus: 1 = spam, 0 = legitimate
texts = [
"win a free prize now",
"free cash bonus click now",
"claim your free reward today",
"meeting moved to monday",
"lunch with the team today",
"project review notes attached",
]
labels = [1, 1, 1, 0, 0, 0]
# Count words, then learn class priors and per-class word probabilities (alpha=1 is Laplace smoothing)
vectorizer = CountVectorizer()
model = MultinomialNB(alpha=1.0)
model.fit(vectorizer.fit_transform(texts), labels)
new = vectorizer.transform(["free prize today", "notes from the monday meeting"])
print(f"P(spam): {model.predict_proba(new)[:, 1].round(3)}")El primer mensaje obtiene una probabilidad de spam de 0,881 porque «free» y «prize» solo aparecen en mensajes de spam; el segundo obtiene 0,053 porque «notes», «monday» y «meeting» solo aparecen en correos legítimos. Sin suavizado, «free» tendría una probabilidad de cero en la clase legítima, y cualquier mensaje legítimo que la contuviera se clasificaría como spam con total certeza.
Ventajas y limitaciones#
El entrenamiento y la predicción tardan un tiempo lineal respecto al número de muestras y características, por lo que Naive Bayes puede procesar millones de documentos con una latencia de inferencia muy baja. Las implementaciones de scikit-learn también se actualizan con nuevos batches mediante partial_fit para el aprendizaje en línea. Además, necesitan pocos datos: Ng y Jordan (2001) demostraron que Naive Bayes se acerca a su error asintótico con menos ejemplos de entrenamiento que la regresión logística, que alcanza un error menor cuando abundan los datos. Sus predicciones de clase suelen ser precisas incluso cuando las características están correlacionadas, porque basta con que el orden de las clases sea correcto.
Sin embargo, las probabilidades en sí están mal calibradas. Las características correlacionadas cuentan varias veces las mismas evidencias, lo que empuja las puntuaciones hacia 0 o 1; por eso, las aplicaciones que necesitan valores de confianza fiables los recalibran con datos reservados. Además, una bolsa de palabras independientes no puede representar el orden ni las interacciones entre palabras, así que «no está bien» parece una mezcla de una negación y una palabra positiva; los modelos con atención, como los Transformers, interpretan las palabras en su contexto.
Aplicaciones#
- Filtrado de spam: Los filtros de correo calculan la puntuación de cada mensaje a partir de las palabras, los patrones de remitente y los enlaces que contiene, y actualizan las estadísticas de palabras cuando los usuarios marcan mensajes como spam.
- Análisis de sentimientos: Las reseñas y las solicitudes de asistencia se clasifican como positivas o negativas según las palabras que utilizan; es un modelo inicial habitual antes de ajustar un modelo de lenguaje.
- Clasificación de documentos: Los artículos periodísticos, los documentos legales y las solicitudes de asistencia se clasifican por temas o colas, a menudo con Naive Bayes complementario cuando algunas categorías son mucho menos frecuentes que otras.
- Referencias de procesamiento del lenguaje natural (NLP): La identificación de idiomas y el etiquetado de temas utilizan Naive Bayes como referencia rápida que cualquier modelo más costoso debe superar.
Naive Bayes en visión artificial#
Los píxeles contiguos están muy correlacionados, así que tratar los píxeles sin procesar como características independientes hace que se pierdan los bordes y las texturas que definen los objetos; las redes neuronales convolucionales los capturan procesando conjuntamente los píxeles vecinos. Antes del aprendizaje profundo, el enfoque de bolsa de palabras visuales aplicaba Naive Bayes a histogramas de descriptores locales, como SIFT, agrupados en palabras visuales mediante agrupamiento k-means, el equivalente visual de los recuentos de palabras. Los recuentos de las clases de objetos que YOLO26 encuentra mediante la detección de objetos forman el mismo tipo de vector de recuentos, por lo que un modelo Naive Bayes multinomial puede clasificar una escena como una calle, una cocina o una oficina basándose únicamente en los objetos detectados.
Naive Bayes frente a modelos relacionados#
- Redes bayesianas: Naive Bayes es la red bayesiana más sencilla: la clase es el único padre de cada característica y no hay conexiones entre las características. Las redes bayesianas generales añaden esas conexiones para modelar dependencias.
- Inferencia bayesiana: «Bayes» en naive Bayes hace referencia al teorema de Bayes. Naive Bayes estándar estima cada probabilidad como una frecuencia suavizada, una única estimación puntual, mientras que los métodos plenamente bayesianos mantienen una distribución sobre cada parámetro.
- Máquinas de vectores de soporte (SVM): Aprenden directamente una frontera discriminativa, con un coste de entrenamiento más alto. En la clasificación de sentimientos, Wang y Manning (2012) observaron que naive Bayes era más preciso que las SVM con fragmentos cortos y que las SVM eran más precisas con reseñas completas.










