1.9. Bayesiano ingenuo

Los métodos de Bayesiano ingenuo son un conjunto de algoritmos de aprendizaje supervisados basados en la aplicación del teorema de Bayes con la suposición «ingenua» de independencia condicional entre cada par de características dado el valor de la variable de clase. El teorema de Bayes indica la siguiente relación, variable de clase dada \(y\) y vector de característica dependiente \(x_1\) a través de \(x_n\), :

\[P(y \mid x_1, \dots, x_n) = \frac{P(y) P(x_1, \dots, x_n \mid y)} {P(x_1, \dots, x_n)}\]

Utilizando el ingenuo supuesto de independencia condicional de ese

\[P(x_i | y, x_1, \dots, x_{i-1}, x_{i+1}, \dots, x_n) = P(x_i | y),\]

para todos los \(i\), esta relación se simplifica a

\[P(y \mid x_1, \dots, x_n) = \frac{P(y) \prod_{i=1}^{n} P(x_i \mid y)} {P(x_1, \dots, x_n)}\]

Como \(P(x_1, \dots, x_n)\) es constante dada la entrada, podemos usar la siguiente regla de clasificación:

\[ \begin{align}\begin{aligned}P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y)\\\Downarrow\\\hat{y} = \arg\max_y P(y) \prod_{i=1}^{n} P(x_i \mid y),\end{aligned}\end{align} \]

y podemos usar la estimación máxima A Posteriori (MAP) para estimar \(P(y)\) y \(P(x_i \mid y)\); el primero es entonces la frecuencia relativa de la clase \(y\) en el conjunto de entrenamiento.

Los diferentes clasificadores Bayesianos ingenuos difieren principalmente por los supuestos que hacen con respecto a la distribución de \(P(x_i \mid y)\).

A pesar de sus supuestos aparentemente demasiado simplificados, los clasificadores Bayesianos ingenuos han funcionado bastante bien en muchas situaciones del mundo real, como la clasificación de documentos y el filtrado de spam. Requieren una pequeña cantidad de datos de entrenamiento para estimar los parámetros necesarios. (Para conocer las razones teóricas por las que el Bayesiano ingenuo funciona bien, y sobre qué tipos de datos lo hace, ver las referencias más abajo.)

Los aprendices y clasificadores de Bayesiano ingenuo pueden ser extremadamente rápidos en comparación con métodos más sofisticados. La disociación de las distribuciones de características condicionales de la clase significa que cada distribución puede estimarse independientemente como una distribución unidimensional. Esto, a su vez, ayuda a aliviar los problemas derivados de la maldición de la dimensionalidad.

Por otro lado, aunque el Bayesiano ingenuo es conocido como un clasificador decente, se sabe que es un mal estimador, por lo que las salidas de probabilidad de predict_proba no deben tomarse demasiado en serio.

Referencias:

1.9.1. Bayesiano ingenuo Gaussiano

GaussianNB implementa el algoritmo Bayesiano ingenuo Gaussiano para la clasificación. Se supone que la probabilidad de las características es gaussiana:

\[P(x_i \mid y) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right)\]

Los parámetros \(sigma_y\) y \(mu_y\) se estiman por máxima verosimilitud.

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.naive_bayes import GaussianNB
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
>>> gnb = GaussianNB()
>>> y_pred = gnb.fit(X_train, y_train).predict(X_test)
>>> print("Number of mislabeled points out of a total %d points : %d"
...       % (X_test.shape[0], (y_test != y_pred).sum()))
Number of mislabeled points out of a total 75 points : 4

1.9.2. Bayesiano ingenuo multinomial

MultinomialNB implementa el algoritmo Bayesiano ingenuo para datos distribuidos multinomialmente, y es una de las dos variantes clásicas de Bayesiano ingenuo utilizadas en la clasificación de textos (donde los datos se representan típicamente como recuentos de vectores de palabras, aunque también se sabe que los vectores tf-idf funcionan bien en la práctica). La distribución está parametrizada por vectores \(theta_y = (\theta_{y1},\ldots,\theta_{yn})\) para cada clase \(y\), donde :math: n es el número de características (en la clasificación de textos, el tamaño del vocabulario) y \(theta_{yi}\) es la probabilidad \(P(x_i \mid y)\) de que la característica \(i\) aparezca en una muestra perteneciente a la clase \(y\).

Los parámetros \(\theta_y\) se estiman por una versión suavizada de la verosimilitud máxima, es decir, conteo de frecuencia relativa:

\[\hat{\theta}_{yi} = \frac{ N_{yi} + \alpha}{N_y + \alpha n}\]

donde \(N_{yi} = \sum_{x \in T} x_i\) es el número de veces que la característica \(i\) aparece en una muestra de la clase \(y\) en el set de entrenamiento \(T\), y \(N_{y} = \sum_{i=1}^{n} N_{yi}\) es el recuento total de todas las características para la clase \(y\).

El suavizado anterior \(\alpha \ge 0\) cuenta con características no presentes en las muestras de aprendizaje y previene cero probabilidades en futuros cálculos. Establecer \(\alpha = 1\) se llama Suavizado Laplace, mientras que \(\alpha < 1\) se llama Suavizado Lidstone.

1.9.3. Complemento de Bayesiano ingenuo

ComplementNB implementa el algoritmo Bayesiano ingenuo complementario (CNB). CNB es una adaptación del algoritmo estándar de Bayesiano ingenuo multinomial (MNB) que es especialmente adecuado para conjuntos de datos desequilibrados. En concreto, el CNB utiliza las estadísticas del complemento de cada clase para calcular las ponderaciones del modelo. Los inventores de CNB demuestran empíricamente que las estimaciones de los parámetros de CNB son más estables que las de MNB. Además, CNB supera regularmente a MNB (a menudo por un margen considerable) en tareas de clasificación de textos. El procedimiento para calcular las ponderaciones es el siguiente:

\[ \begin{align}\begin{aligned}\hat{\theta}_{ci} = \frac{\alpha_i + \sum_{j:y_j \neq c} d_{ij}} {\alpha + \sum_{j:y_j \neq c} \sum_{k} d_{kj}}\\w_{ci} = \log \hat{\theta}_{ci}\\w_{ci} = \frac{w_{ci}}{\sum_{j} |w_{cj}|}\end{aligned}\end{align} \]

donde las sumatorias son sobre todos los documentos \(j\) que no están en la clase \(c\), \(d_{ij}\) es el recuento o el valor tf-idf del término \(i\) en el documento \(j\), \(alpha_i\) es un hiperparámetro de suavización como el que se encuentra en MNB, y \(alpha = \sum_{i} \alpha_i\). alpha_i`. La segunda normalización aborda la tendencia de los documentos más largos a dominar las estimaciones de los parámetros en MNB. La regla de clasificación es:

\[\hat{c} = \arg\min_c \sum_{i} t_i w_{ci}\]

es decir, se asigna un documento a la clase que es la más pobre coincidencia de complementos.

Referencias:

1.9.4. Bayesiano ingenuo de Bernoulli

BernoulliNB implementa los algoritmos de entrenamiento y clasificación de Bayesiano ingenuo para los datos que se distribuyen de acuerdo con las distribuciones Bernoulli multivariadas; es decir, puede haber múltiples características pero se asume que cada una es una variable de valor binario (Bernoulli, booleano). Por lo tanto, esta clase requiere que las muestras se representen como vectores de características de valor binario; si se entrega cualquier otro tipo de datos, una instancia de BernoulliNB puede binarizar su entrada (dependiendo del parámetro binarize).

La regla de decisión para los Bayesianos ingenuos de Bernoulli se basa en

\[P(x_i \mid y) = P(i \mid y) x_i + (1 - P(i \mid y)) (1 - x_i)\]

que difiere de la regla de Bayesiano ingenuo multinomial en que penaliza explícitamente la no ocurrencia de una característica \(i\) que es un indicador de la clase \(y\), mientras que la variante multinomial simplemente ignoraría una característica no ocurrente.

En el caso de la clasificación de textos, se pueden utilizar vectores de ocurrencia de palabras (en lugar de vectores de recuento de palabras) para entrenar y utilizar este clasificador. BernoulliNB podría tener un mejor rendimiento en algunos conjuntos de datos, especialmente en aquellos con documentos más cortos. Es aconsejable evaluar ambos modelos, si el tiempo lo permite.

Referencias:

1.9.5. Bayesiano ingenuo categórico

CategoricalNB implementa el algoritmo de Bayesiano ingenuo categórico para datos distribuidos categóricamente. Supone que cada característica, descrita por el índice \(i\), tiene su propia distribución categórica.

Para cada característica \(i\) del conjunto de entrenamiento \(X\), CategoricalNB estima una distribución categórica para cada característica i de X condicionada a la clase y. El conjunto de índices de las muestras se define como \(J = \{ 1, \dots, m \}\), siendo \(m\) el número de muestras.

Se estima la probabilidad de la categoría \(t\) en la característica \(i\) dada clase \(c\):

\[P(x_i = t \mid y = c \: ;\, \alpha) = \frac{ N_{tic} + \alpha}{N_{c} + \alpha n_i},\]

donde \(N_{tic} = |\{j \in J \mid x_{ij} = t, y_j = c\}|\) es el número de veces que aparece la categoría \(t\) en las muestras \(x_{i}\), que pertenecen a la clase \(c\), \(N_{c} = |\{ j \in J\mid y_j = c\}|\) es el número de muestras con la clase c, \(\alpha\) es un parámetro suavizado y \(n_i\) es el número de categorías disponibles de la función \(i\).

CategoricalNB asume que la matriz de muestra \(X\) está codificada (por ejemplo con la ayuda de OrdinalEncoder) de forma que todas las categorías de cada característica \(i\) están representadas con números \(0, ..., n_i - 1\) donde \(n_i\) es el número de categorías disponibles de la característica \(i\).

1.9.6. Ajuste del modelo de Bayesiano ingenuo fuera del núcleo

Los modelos Bayesianoa ingenuos pueden utilizarse para abordar problemas de clasificación a gran escala para los que el conjunto de entrenamiento completo podría no caber en la memoria. Para manejar este caso, MultinomialNB, BernoulliNB, y GaussianNB exponen un método partial_fit que puede ser utilizado de forma incremental como se hace con otros clasificadores como se demuestra en Clasificación de documentos de texto fuera del núcleo. Todos los clasificadores Bayesianos ingenuos admiten la ponderación de las muestras.

Contrario al método fit, la primera llamada a partial_fit necesita ser pasada la lista de todas las etiquetas de clase esperadas.

Para una visión general de las estrategias disponibles en scikit-learn, ver también la documentación aprendiendo fuera del núcleo.

Nota

La llamada al método partial_fit de los modelos Bayesianos ingenuos introduce cierta sobrecarga computacional. Se recomienda utilizar tamaños de trozos de datos lo más grandes posible, es decir, lo que permita la memoria RAM disponible.