Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

GaussianNB / MultinomialNB / BernoulliNB

API Reference

Signature

clf = sp.GaussianNB(var_smoothing=1e-9)
clf = sp.MultinomialNB(alpha=1.0)
clf = sp.BernoulliNB(alpha=1.0)

model.fit(X, y)
model.predict(X)               -> list[int]
model.predict_proba(X)         -> ndarray (n, K)
model.score(X, y)              -> float
model.get_params()             -> dict
model.set_params(var_smoothing=...) | set_params(alpha=...)

Constructor parameters — GaussianNB

ParameterTypeDefaultDescription
var_smoothingfloat1e-9Fraction of the largest variance added to all variances for stability

Constructor parameters — MultinomialNB

ParameterTypeDefaultDescription
alphafloat1.0Laplace/Lidstone smoothing parameter

Constructor parameters — BernoulliNB

ParameterTypeDefaultDescription
alphafloat1.0Laplace/Lidstone smoothing parameter

Attributes (all variants)

AttributeTypeDescription
classes_list[int]Unique class labels
class_prior_list[float]Prior probability $P(y=k)$ per class
class_count_list[float]Number of training samples per class
Example
import seraplot as sp
import numpy as np

X = np.random.randn(500, 6)
y = (X[:, 0] + X[:, 1] > 0).astype(int)

gnb = sp.GaussianNB()
gnb.fit(X, y)
print(f"GaussianNB accuracy: {gnb.score(X, y):.4f}")

X_counts = np.random.randint(0, 10, (500, 6)).astype(float)
mnb = sp.MultinomialNB(alpha=1.0)
mnb.fit(X_counts, y)
print(f"MultinomialNB accuracy: {mnb.score(X_counts, y):.4f}")

X_bin = (X > 0).astype(float)
bnb = sp.BernoulliNB(alpha=1.0)
bnb.fit(X_bin, y)
print(f"BernoulliNB accuracy: {bnb.score(X_bin, y):.4f}")

Algorithmic Functioning

All three variants apply Bayes' theorem with class-conditional independence:

$$\hat{y} = \underset{k}{\arg\max}\; P(y=k) \prod_{j=1}^p P(x_j \mid y=k)$$

The three models differ only in how $P(x_j \mid y=k)$ is modelled.


GaussianNB — continuous features

Assumes each feature is Gaussian within each class. Parameters are estimated from training data:

$$\mu_{kj} = \frac{1}{n_k}\sum_{i: y_i=k} x_{ij}, \qquad \sigma^2_{kj} = \frac{1}{n_k}\sum_{i: y_i=k}(x_{ij} - \mu_{kj})^2 + \varepsilon_{\text{smooth}}$$

where $\varepsilon_{\text{smooth}} = \texttt{var_smoothing} \cdot \max_j \hat{\sigma}^2_j$ prevents zero variances.

Likelihood:

$$P(x_j \mid y=k) = \frac{1}{\sqrt{2\pi\sigma^2_{kj}}} \exp\!\left(-\frac{(x_j - \mu_{kj})^2}{2\sigma^2_{kj}}\right)$$

MultinomialNB — count features

Designed for count data (e.g. word frequencies). Feature conditional is a multinomial distribution:

$$P(x_j \mid y=k) = \frac{N_{kj} + \alpha}{N_k + \alpha p}$$

where $N_{kj} = \sum_{i:y_i=k} x_{ij}$ is the total count of feature $j$ in class $k$, $N_k = \sum_j N_{kj}$, and $\alpha$ is the Laplace smoothing term.


BernoulliNB — binary features

Designed for binary/boolean feature vectors. For each feature $j$:

$$P(x_j = 1 \mid y=k) = \frac{N_{kj} + \alpha}{n_k + 2\alpha}$$

and the likelihood explicitly accounts for absent features:

$$P(x_j \mid y=k) = P(x_j=1 \mid y=k)^{x_j}\cdot\bigl(1 - P(x_j=1 \mid y=k)\bigr)^{1-x_j}$$

All three variants compute the final log-probability in log-space to avoid underflow:

$$\log P(y=k \mid x) \propto \log P(y=k) + \sum_{j=1}^p \log P(x_j \mid y=k)$$

Référence API

Signature

clf = sp.GaussianNB(var_smoothing=1e-9)
clf = sp.MultinomialNB(alpha=1.0)
clf = sp.BernoulliNB(alpha=1.0)

model.fit(X, y)
model.predict(X)               -> list[int]
model.predict_proba(X)         -> ndarray (n, K)
model.score(X, y)              -> float
model.get_params()             -> dict
model.set_params(var_smoothing=...) | set_params(alpha=...)

Paramètres du constructeur — GaussianNB

ParamètreTypeDéfautDescription
var_smoothingfloat1e-9Fraction de la plus grande variance ajoutée à toutes les variances pour la stabilité

Paramètres du constructeur — MultinomialNB

ParamètreTypeDéfautDescription
alphafloat1.0Paramètre de lissage Laplace/Lidstone

Paramètres du constructeur — BernoulliNB

ParamètreTypeDéfautDescription
alphafloat1.0Paramètre de lissage Laplace/Lidstone

Attributs (toutes variantes)

AttributTypeDescription
classes_list[int]Labels de classes uniques
class_prior_list[float]Probabilité a priori $P(y=k)$ par classe
class_count_list[float]Nombre d'échantillons d'entraînement par classe
Exemple
import seraplot as sp
import numpy as np

X = np.random.randn(500, 6)
y = (X[:, 0] + X[:, 1] > 0).astype(int)

gnb = sp.GaussianNB()
gnb.fit(X, y)
print(f"Précision GaussianNB : {gnb.score(X, y):.4f}")

X_counts = np.random.randint(0, 10, (500, 6)).astype(float)
mnb = sp.MultinomialNB(alpha=1.0)
mnb.fit(X_counts, y)
print(f"Précision MultinomialNB : {mnb.score(X_counts, y):.4f}")

X_bin = (X > 0).astype(float)
bnb = sp.BernoulliNB(alpha=1.0)
bnb.fit(X_bin, y)
print(f"Précision BernoulliNB : {bnb.score(X_bin, y):.4f}")

Fonctionnement algorithmique

Les trois variantes appliquent le théorème de Bayes avec indépendance conditionnelle aux classes :

$$\hat{y} = \underset{k}{\arg\max}\; P(y=k) \prod_{j=1}^p P(x_j \mid y=k)$$

Les trois modèles diffèrent uniquement dans la façon dont $P(x_j \mid y=k)$ est modélisé.


GaussianNB — features continues

Suppose que chaque feature suit une loi gaussienne au sein de chaque classe. Les paramètres sont estimés à partir des données d'entraînement :

$$\mu_{kj} = \frac{1}{n_k}\sum_{i: y_i=k} x_{ij}, \qquad \sigma^2_{kj} = \frac{1}{n_k}\sum_{i: y_i=k}(x_{ij} - \mu_{kj})^2 + \varepsilon_{\text{smooth}}$$

où $\varepsilon_{\text{smooth}} = \texttt{var_smoothing} \cdot \max_j \hat{\sigma}^2_j$ évite les variances nulles.

Vraisemblance :

$$P(x_j \mid y=k) = \frac{1}{\sqrt{2\pi\sigma^2_{kj}}} \exp\!\left(-\frac{(x_j - \mu_{kj})^2}{2\sigma^2_{kj}}\right)$$

MultinomialNB — features de comptage

Conçu pour les données de comptage (par ex. fréquences de mots). La conditionnelle de feature est une distribution multinomiale :

$$P(x_j \mid y=k) = \frac{N_{kj} + \alpha}{N_k + \alpha p}$$

où $N_{kj} = \sum_{i:y_i=k} x_{ij}$ est le comptage total de la feature $j$ dans la classe $k$, $N_k = \sum_j N_{kj}$, et $\alpha$ est le terme de lissage de Laplace.


BernoulliNB — features binaires

Conçu pour les vecteurs de features binaires/booléens. Pour chaque feature $j$ :

$$P(x_j = 1 \mid y=k) = \frac{N_{kj} + \alpha}{n_k + 2\alpha}$$

et la vraisemblance prend explicitement en compte les features absentes :

$$P(x_j \mid y=k) = P(x_j=1 \mid y=k)^{x_j}\cdot\bigl(1 - P(x_j=1 \mid y=k)\bigr)^{1-x_j}$$

Les trois variantes calculent la log-probabilité finale dans l'espace logarithmique pour éviter le sous-dépassement :

$$\log P(y=k \mid x) \propto \log P(y=k) + \sum_{j=1}^p \log P(x_j \mid y=k)$$