Kursinhalt
Clusteranalyse
Clusteranalyse
Mean-Shift-Clustering
Mean Shift ist der einfachste dichtebasierte Clustering-Algorithmus. Einfach ausgedrückt bedeutet "Mean Shift" "iteratives Verschieben zum Mittelwert". Im Algorithmus wird jeder Datenpunkt Schritt für Schritt zum "regionalen Mittelwert" verschoben, und der Ort des endgültigen Ziels jedes Punktes repräsentiert das Cluster, zu dem er gehört. Der Algorithmus besteht aus den folgenden Schritten:
Schritt 1. Für jeden Datenpunkt müssen Sie ein verschiebbares Fenster mit einem bestimmten Radius (Bandbreite) erstellen;
Schritt 2. Verschieben Sie jedes der Schiebefenster in Richtung höherer Dichtebereiche, indem Sie dessen Schwerpunkt auf den Mittelwert der Datenpunkte innerhalb des Fensters verschieben. Dieser Schritt wird wiederholt, bis es keine Zunahme der Anzahl der Punkte im Schiebefenster mehr gibt oder der Schwerpunkt sich nicht mehr bewegt;
Schritt 3. Auswahl der Schiebefenster durch Zusammenführen überlappender Fenster. Wenn mehrere Fenster überlappen, wird das Fenster mit den meisten Punkten beibehalten und die anderen werden mit ihm zusammengeführt;
Schritt 4. Weisen Sie die Datenpunkte dem Schiebefenster zu, in dem sie sich befinden. Wenn sich der Datenpunkt außerhalb des Fensters befindet, weisen Sie ihn dem nächstgelegenen Fenster zu.
Mean Shift verschiebt die Fenster in eine Region höherer Dichte, indem es deren Schwerpunkt (Mittelpunkt des verschiebbaren Fensters) auf den Mittelwert der Datenpunkte innerhalb des verschiebbaren Fensters verschiebt.
Der Mean Shift-Algorithmus ist dem K-Means-Algorithmus sehr ähnlich: Er arbeitet ebenfalls mit dem Mittelwert der Punkte und kann nur auf isolierten Clustern arbeiten. Aber es gibt einen wesentlichen Unterschied: Der Algorithmus muss die Anzahl der Cluster nicht manuell festlegen.
Schauen wir uns ein Beispiel für die Verwendung von Mean Shift Clustering in Python an:
from sklearn.cluster import MeanShift import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs, make_moons # Create dataset for clustering X, y = make_blobs(n_samples=500, cluster_std=1, centers=4 ) transformation = [[0.6, -0.6], [-0.4, 0.8]] X_aniso = np.matmul(X, transformation) # Train Mean Shift model on blobs dataset and visualize the results blobs_clustering = MeanShift(bandwidth=2).fit(X_aniso) fig, axes = plt.subplots(1, 2) axes[0].scatter(X[:, 0], X[:, 1], c=blobs_clustering.labels_, s=50, cmap='tab20b') axes[0].set_title('Clustered anizo blobs data') axes[1].scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='tab20b') axes[1].set_title('Real anizo blobs data')
Lassen Sie uns überprüfen, wie der Mean Shift-Algorithmus mit dem Moons-Datensatz umgeht:
from sklearn.datasets import make_moons import matplotlib.pyplot as plt from sklearn.cluster import MeanShift # Create moons dataset for clustering X, y = make_moons(n_samples=500) # Fit Mean Shift model on moons dataset and visualize the results moons_clustering = MeanShift(bandwidth=0.7).fit(X) fig,axes = plt.subplots(1,2) axes[0].scatter(X[:, 0], X[:, 1], c=moons_clustering.labels_, s=50, cmap='tab20b') axes[0].set_title('Clustered moons data') axes[1].scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='tab20b') axes[1].set_title('Real moons data')
Im obigen Code verwenden wir die MeanShift
-Klasse, um das Modell zu erstellen: Der bandwidth
-Parameter definiert den Radius, innerhalb dessen der Durchschnittswert berechnet wird.
Hinweis
In der
MeanShift
-Klasse können Sie die Methode.predict()
verwenden, um Vorhersagen basierend auf einem bereits trainierten Modell zu treffen.
Danke für Ihr Feedback!