Dichteschätzung mit Gaussian Mixture Models

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab verwenden wir die scikit-learn-Bibliothek, um einen Gaussian-Mischungs-Datensatz zu generieren. Anschließend werden wir ein Gaussian Mixture Model (GMM) an den Datensatz anpassen und die Dichteschätzung der Gaussian-Mischung darstellen. GMMs können verwendet werden, um die Wahrscheinlichkeitsverteilung eines Datensatzes zu modellieren und zu schätzen.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Bibliotheken importieren

Wir beginnen mit dem Import der erforderlichen Bibliotheken: NumPy für numerische Berechnungen und Matplotlib für Visualisierungen. Wir importieren auch die GaussianMixture-Klasse aus der scikit-learn-Bibliothek, um das GMM an unseren Datensatz anzupassen.

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

Daten generieren

Als nächstes werden wir einen Gaussian-Mischungs-Datensatz mit zwei Komponenten generieren. Wir werden einen verschobenen Gaussian-Datensatz um (20, 20) zentrieren und einen nullzentrierten gedehnten Gaussian-Datensatz erstellen. Anschließend werden wir die beiden Datensätze zu dem endgültigen Trainingssatz zusammenfügen.

n_samples = 300

## generiere zufällige Stichprobe, zwei Komponenten
np.random.seed(0)

## generiere sphärische Daten um (20, 20) zentriert
shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20])

## generiere nullzentrierte gedehnte Gaussian-Daten
C = np.array([[0.0, -0.7], [3.5, 0.7]])
stretched_gaussian = np.dot(np.random.randn(n_samples, 2), C)

## füge die beiden Datensätze zu dem endgültigen Trainingssatz zusammen
X_train = np.vstack([shifted_gaussian, stretched_gaussian])

Gaussian Mixture Model anpassen

Wir werden nun ein GMM an den Datensatz mit der GaussianMixture-Klasse aus scikit-learn anpassen. Wir werden die Anzahl der Komponenten auf 2 und den Kovarianztyp auf "vollständig" setzen.

## passe ein Gaussian Mixture Model mit zwei Komponenten an
clf = mixture.GaussianMixture(n_components=2, covariance_type="full")
clf.fit(X_train)

Dichteschätzung darstellen

Wir werden nun die Dichteschätzung der Gaussian-Mischung darstellen. Wir werden ein Gitter von Punkten über den Bereich des Datensatzes erstellen und die negative Log-Likelihood berechnen, die vom GMM für jeden Punkt vorhergesagt wird. Anschließend werden wir die vorhergesagten Scores als Konturplot anzeigen und die Trainingsdaten als Streudiagramm darstellen.

## zeige die von dem Modell vorhergesagten Scores als Konturplot an
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("Dichteschätzung mit Gaussian Mixture Models")
plt.axis("tight")
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit scikit-learn einen Gaussian-Mischungs-Datensatz generiert und ein GMM an den Datensatz anpasst. Wir haben auch die Dichteschätzung der Gaussian-Mischung mit einem Konturplot dargestellt.