Inicio · Parte 14 — Matemática de Machine Learning
P(c|x) ∝ P(c)·Π P(xᵢ|c)
supuesto: independencia condicional dada la clase
se trabaja en logaritmos para evitar subdesbordamiento
Naive Bayes aplica el teorema de Bayes de la clase 186 a la clasificación, y para hacer el cálculo tratable supone que las características son independientes dada la clase. Ese supuesto permite factorizar la verosimilitud conjunta en un producto de términos unidimensionales, que sí se pueden estimar con pocos datos.
El supuesto casi nunca es cierto. En un texto, la aparición de una palabra está claramente correlacionada con la de otras; en datos médicos, los síntomas se agrupan. Y sin embargo el clasificador funciona sorprendentemente bien, hecho comprobado durante décadas en filtrado de spam.
La explicación es que la clasificación solo necesita el orden, no el valor. Aunque las probabilidades estimadas estén mal calibradas —y con el supuesto ingenuo lo están, tienden a valores extremos—, la clase con mayor probabilidad suele seguir siendo la correcta. Naive Bayes es mal estimador de probabilidad y buen clasificador, y conviene no usarlo cuando lo que se necesita es el valor de la probabilidad.
Dos detalles de implementación son obligatorios. Trabajar en logaritmos, porque multiplicar cientos de densidades produce subdesbordamiento a cero. Y aplicar suavizado de Laplace, sumando un pseudo-conteo, para que una categoría nunca vista no anule toda la probabilidad de la clase con un cero multiplicativo.
Naive Bayes gaussiano sobre dos clases y dos características.
clase 0: prior 0,5 medias (−1,1503 ; −1,0020)
varianzas (0,5396 ; …)
clase 1: prior 0,5 medias ( 2,1592 ; 1,8087)
accuracy = 1,0
Supuesto: P(x₁,x₂|c) = P(x₁|c)·P(x₂|c)
Aquí se cumple aproximadamente porque las características
se generaron independientes.
Cálculo en logaritmos:
log P(c|x) = log P(c) + Σ log P(xᵢ|c) + constante
Sin logaritmos, con 100 características el producto
sería del orden de 1e-200 y se redondearía a cero.
Naive Bayes gaussiano: independencia condicional como supuesto explícito.
python classes/part-14-matematica-de-machine-learning/287-naive-bayes/lab.py
compmath run 287
clasesaccuracysupuestose_cumple_aquipor_que_funciona_igual_si_fallase_trabaja_en_log{
"clases": {
"0": {
"prior": 0.5,
"medias": [
-1.1503,
-1.002
],
"varianzas": [
0.5396,
0.4152
]
},
"1": {
"prior": 0.5,
"medias": [
2.1592,
1.8087
],
"varianzas": [
0.6566,
0.6286
]
}
},
"accuracy": 1.0,
"supuesto": "P(x₁,x₂|c) = P(x₁|c)·P(x₂|c)",
"se_cumple_aqui": "aproximadamente: las features se generaron independientes",
"por_que_funciona_igual_si_falla": "la decisión solo necesita el orden, no la probabilidad exacta",
"se_trabaja_en_log": "evita underflow al multiplicar muchas densidades"
}
Filtrado de spam, clasificación de texto, diagnóstico rápido con muchas variables y línea base con pocos datos.
Estos algoritmos siguen siendo la línea base honesta contra la que se debe comparar cualquier modelo profundo.
9780387848570 verificado en International ISBN Agency (2026-08-19).10.1023/a:1007413511361 verificado en Crossref (2026-08-19).