Naive Bayes como red bayesiana

Una red bayesiana es algo de lo que ya hablé (y que me está volviendo a interesar mucho últimamente). En esencia, es un modelo probabilístico construido sobre un grafo dirigido acíclico.

Que, a su vez, es algo parecido a

Directed_acyclic_graph

que es un grafo (obviamente), dirigido (tiene flechas) y acíclico porque siguiéndolas no se llega nunca al punto de partida. Se puede construir modelos probabilísticos sobre ellos. Basta con definir para cada nodo x la probabilidad condicional P(x|A(x)), donde A(x) son sus padres directos. Con estas probabilidades condicionales (y un poco de esfuerzo) se puede construir la función de probabilidad completa, P(x_1, \dots, x_n).

Los que no sepáis que es eso del naive Bayes estáis de enhorabuena porque os lo voy a contar: es una red bayesiana que tiene esta pinta:

naive_bayes

Pensad en y como en la variable que indica si un mensaje es spam o no y en x_i como en un indicador de si el mensaje contiene alguna palabra clave (p.e., viagra). El hecho de que un mensaje sea o no spam modifica la probabilidad de ocurrencia de dichas palabras. P(x_i | y), valor que puede estimarse a partir de una muestra de mensajes.

El hecho de que no haya flechas entre los x_i significa que son independientes entre sí (condicionalmente con respecto a y). Esto es normalmente (siempre) mentira; pero la aproximación es a menudo tolerable.
La probabilidad total de la red es

P(y, x_1,\dots, x_n) = P(x_1,\dots, x_n| y) P(y) = \prod P(x_i | y) P(y).

Y lo más importante de todo, conocidos los indicios x_i, puede estimarse la probabilidad de y así:

P(y | x_1,\dots, x_n ) = P(y, x_1,\dots, x_n) / P(y) = \prod P(x_i | y),

que es la fórmula que aparece por doquier y a la que se puede llegar también desde otros puntos de partida alternativos.