Estimación de densidad con modelos de mezcla gaussiana

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, usaremos la librería scikit-learn para generar un conjunto de datos de mezcla gaussiana. Luego ajustaremos un modelo de mezcla gaussiana (GMM) al conjunto de datos y graficaremos la estimación de densidad de la mezcla de gaussianas. Los GMM se pueden usar para modelar y estimar la distribución de probabilidad de un conjunto de datos.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje comentarios después de la sesión y lo resolveremos rápidamente para usted.


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{{"Estimación de densidad con modelos de mezcla gaussiana"}} end

Importar bibliotecas

Comenzaremos importando las bibliotecas necesarias: NumPy para los cálculos numéricos y Matplotlib para las visualizaciones. También importaremos la clase GaussianMixture de la librería scikit-learn para ajustar el GMM a nuestro conjunto de datos.

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

Generar datos

A continuación, generaremos un conjunto de datos de mezcla gaussiana con dos componentes. Crearemos un conjunto de datos gaussiano desplazado centrado en (20, 20) y un conjunto de datos gaussiano estirado centrado en cero. Luego concatenaremos los dos conjuntos de datos en el conjunto de entrenamiento final.

n_samples = 300

## generar muestra aleatoria, dos componentes
np.random.seed(0)

## generar datos esféricos centrado en (20, 20)
shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20])

## generar datos gaussianos estirados centrado en cero
C = np.array([[0.0, -0.7], [3.5, 0.7]])
stretched_gaussian = np.dot(np.random.randn(n_samples, 2), C)

## concatenar los dos conjuntos de datos en el conjunto de entrenamiento final
X_train = np.vstack([shifted_gaussian, stretched_gaussian])

Ajustar el modelo de mezcla gaussiana

Ahora ajustaremos un GMM al conjunto de datos usando la clase GaussianMixture de scikit-learn. Estableceremos el número de componentes en 2 y el tipo de covarianza en "full".

## ajustar un modelo de mezcla gaussiana con dos componentes
clf = mixture.GaussianMixture(n_components=2, covariance_type="full")
clf.fit(X_train)

Graficar la estimación de densidad

Ahora graficaremos la estimación de densidad de la mezcla de gaussianas. Crearemos una malla de puntos en el rango del conjunto de datos y calcularemos la negativa del log-verosimilitud predicha por el GMM para cada punto. Luego mostraremos las puntuaciones predichas como un gráfico de contornos y un diagrama de dispersión de los datos de entrenamiento.

## mostrar las puntuaciones predichas por el modelo como un gráfico de contornos
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("Density Estimation with Gaussian Mixture Models")
plt.axis("tight")
plt.show()

Resumen

En este laboratorio, aprendimos cómo usar scikit-learn para generar un conjunto de datos de mezcla gaussiana y ajustar un GMM al conjunto de datos. También graficamos la estimación de densidad de la mezcla de gaussianas usando un gráfico de contornos.