Initialisierungsmethoden für Gaussian Mixture Modelle

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 werden wir uns mit verschiedenen Initialisierungsmethoden für Gaussian Mixture Models (GMM) befassen. Wir werden die scikit-learn-Bibliothek verwenden, um Stichproben-Daten zu generieren und die Cluster-Ergebnisse zu visualisieren. Es gibt vier verschiedene Methoden für den Initialisierungsparameter init_param: kmeans (Standard), random, random_from_data und k-means++.

Tipps für die VM

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 nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/mixture("Gaussian Mixture Models") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/utils("Utilities") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/mixture -.-> lab-49135{{"Initialisierungsmethoden für Gaussian Mixture Modelle"}} sklearn/utils -.-> lab-49135{{"Initialisierungsmethoden für Gaussian Mixture Modelle"}} sklearn/datasets -.-> lab-49135{{"Initialisierungsmethoden für Gaussian Mixture Modelle"}} ml/sklearn -.-> lab-49135{{"Initialisierungsmethoden für Gaussian Mixture Modelle"}} end

Bibliotheken importieren und Stichproben-Daten generieren

Wir beginnen, indem wir die erforderlichen Bibliotheken importieren und einige Stichproben-Daten mit der Funktion make_blobs aus scikit-learn generieren.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.mixture import GaussianMixture
from sklearn.utils.extmath import row_norms
from sklearn.datasets._samples_generator import make_blobs
from timeit import default_timer as timer

## Generate some data
X, y_true = make_blobs(n_samples=4000, centers=4, cluster_std=0.60, random_state=0)
X = X[:, ::-1]

n_samples = 4000
n_components = 4
x_squared_norms = row_norms(X, squared=True)

Funktion definieren, um die initialen Mittelwerte zu erhalten

Als nächstes definieren wir eine Funktion get_initial_means, die die Stichproben-Daten, die Initialisierungsmethode und den Zufallszustand als Eingaben nimmt und die initialen Mittelwerte zurückgibt.

def get_initial_means(X, init_params, r):
    ## Führen Sie ein GaussianMixture mit max_iter=0 aus, um die initialen Mittelwerte auszugeben
    gmm = GaussianMixture(
        n_components=4, init_params=init_params, tol=1e-9, max_iter=0, random_state=r
    ).fit(X)
    return gmm.means_

Die Stichproben-Daten und die Initialisierungszentren darstellen

Wir werden nun die Stichproben-Daten und die Initialisierungszentren für jede Initialisierungsmethode mit unterschiedlichen Farben darstellen. Wir berechnen auch die Zeit, die für die Initialisierung benötigt wird, und die Anzahl der Iterationen, die der GMM benötigt, um sich zu konvergieren.

methods = ["kmeans", "random_from_data", "k-means++", "random"]
colors = ["navy", "turquoise", "cornflowerblue", "darkorange"]
times_init = {}
relative_times = {}

plt.figure(figsize=(4 * len(methods) // 2, 6))
plt.subplots_adjust(
    bottom=0.1, top=0.9, hspace=0.15, wspace=0.05, left=0.05, right=0.95
)

for n, method in enumerate(methods):
    r = np.random.RandomState(seed=1234)
    plt.subplot(2, len(methods) // 2, n + 1)

    start = timer()
    ini = get_initial_means(X, method, r)
    end = timer()
    init_time = end - start

    gmm = GaussianMixture(
        n_components=4, means_init=ini, tol=1e-9, max_iter=2000, random_state=r
    ).fit(X)

    times_init[method] = init_time
    for i, color in enumerate(colors):
        data = X[gmm.predict(X) == i]
        plt.scatter(data[:, 0], data[:, 1], color=color, marker="x")

    plt.scatter(
        ini[:, 0], ini[:, 1], s=75, marker="D", c="orange", lw=1.5, edgecolors="black"
    )
    relative_times[method] = times_init[method] / times_init[methods[0]]

    plt.xticks(())
    plt.yticks(())
    plt.title(method, loc="left", fontsize=12)
    plt.title(
        "Iter %i | Init Time %.2fx" % (gmm.n_iter_, relative_times[method]),
        loc="right",
        fontsize=10,
    )
plt.suptitle("GMM iterations and relative time taken to initialize")
plt.show()

Die Ergebnisse interpretieren

Wir können aus dem Diagramm sehen, dass k-means++ sowohl eine geringe Initialisierungszeit als auch eine geringe Anzahl an Iterationen des GaussianMixture benötigt, um sich zu konvergieren. Wenn mit random_from_data oder random initialisiert wird, benötigt das Modell mehr Iterationen, um sich zu konvergieren. Alle drei alternativen Methoden benötigen weniger Zeit zur Initialisierung im Vergleich zu kmeans.

Zusammenfassung

In diesem Lab haben wir uns mit verschiedenen Initialisierungsmethoden für Gaussian Mixture Models (GMM) und mit der Verwendung dieser Methoden zur Clusterbildung von Stichproben-Daten mit der scikit-learn-Bibliothek vertraut gemacht. Wir haben die Stichproben-Daten und die Initialisierungszentren für jede Initialisierungsmethode dargestellt und die Ergebnisse interpretiert.