Estimativa de Densidade com Modelos de Mistura Gaussiana

Beginner

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

Introdução

Neste laboratório, utilizaremos a biblioteca scikit-learn para gerar um conjunto de dados de mistura gaussiana. Em seguida, ajustaremos um Modelo de Mistura Gaussiana (GMM) ao conjunto de dados e plotaremos a estimativa de densidade da mistura de gaussianas. Os modelos GMM podem ser usados para modelar e estimar a distribuição de probabilidade de um conjunto de dados.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Importar Bibliotecas

Começaremos importando as bibliotecas necessárias: NumPy para cálculos numéricos e Matplotlib para visualizações. Também importamos a classe GaussianMixture da biblioteca scikit-learn para ajustar o modelo GMM aos nossos dados.

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

Gerar Dados

Em seguida, geraremos um conjunto de dados de mistura gaussiana com dois componentes. Criaremos um conjunto de dados gaussiano deslocado centrado em (20, 20) e um conjunto de dados gaussiano esticado centrado na origem. Em seguida, concatenaremos os dois conjuntos de dados no conjunto de treino final.

n_samples = 300

## gerar amostra aleatória, dois componentes
np.random.seed(0)

## gerar dados gaussianos esféricos centrados em (20, 20)
shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20])

## gerar dados gaussianos esticados centrados na origem
C = np.array([[0.0, -0.7], [3.5, 0.7]])
stretched_gaussian = np.dot(np.random.randn(n_samples, 2), C)

## concatenar os dois conjuntos de dados no conjunto de treino final
X_train = np.vstack([shifted_gaussian, stretched_gaussian])

Ajustar o Modelo de Mistura Gaussiana

Agora, ajustaremos um modelo de mistura gaussiana (GMM) aos dados usando a classe GaussianMixture do scikit-learn. Definiremos o número de componentes para 2 e o tipo de covariância para "full".

## ajustar um Modelo de Mistura Gaussiana com dois componentes
clf = mixture.GaussianMixture(n_components=2, covariance_type="full")
clf.fit(X_train)

Plotar a Estimativa de Densidade

Agora, plotaremos a estimativa de densidade da mistura de gaussianas. Criaremos uma malha de pontos sobre o intervalo do conjunto de dados e calcularemos a probabilidade logarítmica negativa prevista pelo GMM para cada ponto. Em seguida, exibiremos as pontuações previstas como um gráfico de contorno e dispersaremos os dados de treinamento.

## exibir as pontuações previstas pelo modelo como um gráfico de contorno
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("Estimativa de Densidade com Modelos de Mistura Gaussiana")
plt.axis("tight")
plt.show()

Resumo

Neste laboratório, aprendemos como usar o scikit-learn para gerar um conjunto de dados de mistura gaussiana e ajustar um modelo de mistura gaussiana (GMM) aos dados. Também plotamos a estimativa de densidade da mistura de gaussianas usando um gráfico de contorno.