Estimation de densité avec des modèles de mélange gaussien

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 allons utiliser la bibliothèque scikit-learn pour générer un ensemble de données à mélange gaussien. Nous allons ensuite ajuster un modèle de mélange gaussien (GMM) à l'ensemble de données et tracer l'estimation de densité du mélange de gaussiennes. Les GMM peuvent être utilisés pour modéliser et estimer la distribution de probabilité d'un ensemble de données.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes 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églerons 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-49136{{"Estimation de densité avec des modèles de mélange gaussien"}} end

Importation des bibliothèques

Nous allons commencer par importer les bibliothèques nécessaires : NumPy pour les calculs numériques et Matplotlib pour les visualisations. Nous allons également importer la classe GaussianMixture de la bibliothèque scikit-learn pour ajuster le GMM à notre ensemble de données.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import mixture

Générer des données

Ensuite, nous allons générer un ensemble de données à mélange gaussien avec deux composantes. Nous allons créer un ensemble de données gaussien décalé centré sur (20, 20) et un ensemble de données gaussien étiré centré sur zéro. Nous allons ensuite concaténer les deux ensembles de données pour former l'ensemble d'entraînement final.

n_samples = 300

## générer un échantillonnage aléatoire, deux composantes
np.random.seed(0)

## générer des données sphériques centrées sur (20, 20)
shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20])

## générer des données gaussiennes étirées centrées sur zéro
C = np.array([[0.0, -0.7], [3.5, 0.7]])
stretched_gaussian = np.dot(np.random.randn(n_samples, 2), C)

## concaténer les deux ensembles de données pour former l'ensemble d'entraînement final
X_train = np.vstack([shifted_gaussian, stretched_gaussian])

Ajuster le modèle de mélange gaussien

Nous allons maintenant ajuster un GMM à l'ensemble de données en utilisant la classe GaussianMixture de scikit-learn. Nous allons définir le nombre de composantes sur 2 et le type de covariance sur "full".

## ajuster un modèle de mélange gaussien avec deux composantes
clf = mixture.GaussianMixture(n_components=2, covariance_type="full")
clf.fit(X_train)

Tracer l'estimation de densité

Nous allons maintenant tracer l'estimation de densité du mélange de gaussiennes. Nous allons créer une grille de points sur la plage de l'ensemble de données et calculer la log-vraisemblance négative prédite par le GMM pour chaque point. Nous allons ensuite afficher les scores prédits sous forme d'un graphique en ligne de niveau et tracer les données d'entraînement en nuage de points.

## afficher les scores prédits par le modèle sous forme d'un graphique en ligne de niveau
x = np.linspace(-20.0, 30.0)
y = np.linspace(-20.0, 40.0)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -clf.score_samples(XX)
Z = Z.reshape(X.shape)

CS = plt.contour(
    X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0), levels=np.logspace(0, 3, 10)
)
CB = plt.colorbar(CS, shrink=0.8, extend="both")
plt.scatter(X_train[:, 0], X_train[:, 1], 0.8)

plt.title("Estimation de densité avec des modèles de mélange gaussien")
plt.axis("tight")
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser scikit-learn pour générer un ensemble de données à mélange gaussien et ajuster un GMM à cet ensemble de données. Nous avons également tracé l'estimation de densité du mélange de gaussiennes à l'aide d'un graphique en ligne de niveau.