Introduction
Dans ce laboratoire, nous utiliserons l'algorithme du modèle mixte gaussien pour ajuster un ensemble de données qui suit une courbe sinusoïdale bruyante. Nous utiliserons deux types différents de modèles mixtes gaussiens, à savoir l'algorithme d'espérance-maximisation et le modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet.
Conseils sur la VM
Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Charger les bibliothèques requises
Nous commencerons par charger les bibliothèques requises pour ce laboratoire.
import itertools
import numpy as np
from scipy import linalg
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn import mixture
Générer un ensemble de données
Ensuite, nous allons générer un ensemble de données qui suit une courbe sinusoïdale bruyante.
## Paramètres
n_samples = 100
## Générer un échantillon aléatoire suivant une courbe sinusoïdale
np.random.seed(0)
X = np.zeros((n_samples, 2))
step = 4.0 * np.pi / n_samples
for i in range(X.shape[0]):
x = i * step - 6.0
X[i, 0] = x + np.random.normal(0, 0.1)
X[i, 1] = 3.0 * (np.sin(x) + np.random.normal(0, 0.2))
Ajuster un modèle mixte gaussien avec l'EM
Nous allons ajuster un modèle mixte gaussien classique avec 10 composantes en utilisant l'algorithme d'espérance-maximisation.
## Ajuster un mélange gaussien avec l'EM en utilisant dix composantes
gmm = mixture.GaussianMixture(
n_components=10, covariance_type="full", max_iter=100
).fit(X)
Tracer les résultats de l'algorithme d'espérance-maximisation
Nous allons tracer les résultats de l'algorithme d'espérance-maximisation.
def plot_results(X, Y, means, covariances, index, title):
splot = plt.subplot(5, 1, 1 + index)
for i, (mean, covar, color) in enumerate(zip(means, covariances, color_iter)):
v, w = linalg.eigh(covar)
v = 2.0 * np.sqrt(2.0) * np.sqrt(v)
u = w[0] / linalg.norm(w[0])
## comme le DP n'utilisera pas tous les composants auxquels il a accès
## à moins qu'il n'en ait besoin, nous ne devrions pas tracer les
## composants redondants.
if not np.any(Y == i):
continue
plt.scatter(X[Y == i, 0], X[Y == i, 1], 0.8, color=color)
## Tracer une ellipse pour montrer le composant gaussien
angle = np.arctan(u[1] / u[0])
angle = 180.0 * angle / np.pi ## convertir en degrés
ell = mpl.patches.Ellipse(mean, v[0], v[1], angle=180.0 + angle, color=color)
ell.set_clip_box(splot.bbox)
ell.set_alpha(0.5)
splot.add_artist(ell)
plt.xlim(-6.0, 4.0 * np.pi - 6.0)
plt.ylim(-5.0, 5.0)
plt.title(title)
plt.xticks(())
plt.yticks(())
plot_results(
X, gmm.predict(X), gmm.means_, gmm.covariances_, 0, "Expectation-maximization"
)
Ajuster un modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet
Nous allons maintenant ajuster un modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet. Nous allons définir une valeur faible pour la concentration a priori pour que le modèle privilégie un nombre plus faible de composants actifs.
dpgmm = mixture.BayesianGaussianMixture(
n_components=10,
covariance_type="full",
weight_concentration_prior=1e-2,
weight_concentration_prior_type="dirichlet_process",
mean_precision_prior=1e-2,
covariance_prior=1e0 * np.eye(2),
init_params="random",
max_iter=100,
random_state=2,
).fit(X)
Tracer les résultats du modèle mixte gaussien bayésien avec une loi a priori de faible concentration
Nous allons tracer les résultats du modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet et une valeur faible de la concentration a priori.
plot_results(
X,
dpgmm.predict(X),
dpgmm.means_,
dpgmm.covariances_,
1,
"Bayesian Gaussian mixture models with a Dirichlet process prior "
r"for $\gamma_0=0.01$.",
)
Échantillonnage à partir du modèle mixte gaussien bayésien avec une loi a priori de faible concentration
Nous allons maintenant échantillonner à partir du modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet et une valeur faible de la concentration a priori.
X_s, y_s = dpgmm.sample(n_samples=2000)
plot_samples(
X_s,
y_s,
dpgmm.n_components,
0,
"Gaussian mixture with a Dirichlet process prior "
r"for $\gamma_0=0.01$ sampled with $2000$ samples.",
)
Ajuster un modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet
Nous allons maintenant ajuster un modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet. Nous allons définir une valeur élevée pour la concentration a priori pour donner au modèle plus de liberté pour modéliser la structure fine des données.
dpgmm = mixture.BayesianGaussianMixture(
n_components=10,
covariance_type="full",
weight_concentration_prior=1e2,
weight_concentration_prior_type="dirichlet_process",
mean_precision_prior=1e-2,
covariance_prior=1e0 * np.eye(2),
init_params="kmeans",
max_iter=100,
random_state=2,
).fit(X)
Tracer les résultats du modèle mixte gaussien bayésien avec une loi a priori de forte concentration
Nous allons tracer les résultats du modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet et une valeur élevée de la concentration a priori.
plot_results(
X,
dpgmm.predict(X),
dpgmm.means_,
dpgmm.covariances_,
2,
"Bayesian Gaussian mixture models with a Dirichlet process prior "
r"for $\gamma_0=100$",
)
Échantillonnage à partir du modèle mixte gaussien bayésien avec une loi a priori de forte concentration
Nous allons maintenant échantillonner à partir du modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet et une valeur élevée de la concentration a priori.
X_s, y_s = dpgmm.sample(n_samples=2000)
plot_samples(
X_s,
y_s,
dpgmm.n_components,
1,
"Gaussian mixture with a Dirichlet process prior "
r"for $\gamma_0=100$ sampled with $2000$ samples.",
)
Sommaire
Dans ce laboratoire, nous avons utilisé l'algorithme du modèle mixte gaussien pour ajuster un ensemble de données qui suit une courbe sinusoidale bruyante. Nous avons utilisé deux types différents de modèles mixtes gaussiens, à savoir l'algorithme d'Espérance-Maximisation et le modèle mixte gaussien bayésien avec une loi a priori de processus de Dirichlet. Nous avons tracé les résultats et échantillonné à partir des deux modèles pour comparer leurs performances. Le choix du meilleur modèle est subjectif et dépend de si nous voulons nous concentrer sur l'ensemble global ou suivre de près les régions de haute densité du signal.