Modèle mixte gaussien et courbe sinusoidale bruyante

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49138{{"Modèle mixte gaussien et courbe sinusoidale bruyante"}} end

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.