Clustering-Algorithmen - Mean-Shift-Algorithmus
Einführung in den Mean-Shift-Algorithmus
Wie bereits erwähnt, handelt es sich um einen weiteren leistungsstarken Clustering-Algorithmus, der beim unbeaufsichtigten Lernen verwendet wird. Im Gegensatz zu K-Means-Clustering werden keine Annahmen getroffen. Daher ist es ein nicht parametrischer Algorithmus.
Der Mean-Shift-Algorithmus weist den Clustern die Datenpunkte grundsätzlich iterativ zu, indem er Punkte in Richtung der höchsten Dichte von Datenpunkten, dh des Cluster-Schwerpunkts, verschiebt.
Der Unterschied zwischen dem K-Means-Algorithmus und der Mittelwertverschiebung besteht darin, dass später die Anzahl der Cluster nicht im Voraus angegeben werden muss, da die Anzahl der Cluster durch den Algorithmus für die Daten bestimmt wird.
Funktionsweise des Mean-Shift-Algorithmus
Wir können die Funktionsweise des Mean-Shift-Clustering-Algorithmus mithilfe der folgenden Schritte verstehen:
Step 1 - Beginnen Sie zunächst mit den Datenpunkten, die einem eigenen Cluster zugewiesen sind.
Step 2 - Als nächstes berechnet dieser Algorithmus die Schwerpunkte.
Step 3 - In diesem Schritt wird die Position neuer Zentroide aktualisiert.
Step 4 - Jetzt wird der Prozess iteriert und in den Bereich mit höherer Dichte verschoben.
Step 5 - Endlich wird es gestoppt, sobald die Zentroide eine Position erreichen, von der aus sie sich nicht weiter bewegen können.
Implementierung in Python
Es ist ein einfaches Beispiel, um zu verstehen, wie der Mean-Shift-Algorithmus funktioniert. In diesem Beispiel wird zunächst ein 2D-Datensatz mit 4 verschiedenen Blobs generiert und anschließend der Mean-Shift-Algorithmus angewendet, um das Ergebnis anzuzeigen.
%matplotlib inline
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[3,3,3],[4,5,5],[3,10,10]]
X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
plt.scatter(X[:,0],X[:,1])
plt.show()
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
marker=".",color='k', s=20, linewidths = 5, zorder=10)
plt.show()
Ausgabe
[[ 2.98462798 9.9733794 10.02629344]
[ 3.94758484 4.99122771 4.99349433]
[ 3.00788996 3.03851268 2.99183033]]
Estimated clusters: 3
Vorteile und Nachteile
Vorteile
Im Folgenden sind einige Vorteile des Mean-Shift-Clustering-Algorithmus aufgeführt:
Es muss keine Modellannahme wie bei K-Mitteln oder Gaußschen Gemischen gemacht werden.
Es kann auch die komplexen Cluster modellieren, die eine nicht konvexe Form haben.
Es wird nur ein Parameter namens Bandbreite benötigt, der automatisch die Anzahl der Cluster bestimmt.
Es gibt kein Problem mit lokalen Minima wie bei K-means.
Kein Problem durch Ausreißer.
Nachteile
Im Folgenden sind einige Nachteile des Mean-Shift-Clustering-Algorithmus aufgeführt:
Der Mean-Shift-Algorithmus funktioniert nicht gut bei hohen Dimensionen, bei denen sich die Anzahl der Cluster abrupt ändert.
Wir haben keine direkte Kontrolle über die Anzahl der Cluster, aber in einigen Anwendungen benötigen wir eine bestimmte Anzahl von Clustern.
Es kann nicht zwischen sinnvollen und bedeutungslosen Modi unterscheiden.