Clustering-Algorithmen - K-bedeutet Algorithmus

Einführung in den K-Means-Algorithmus

Der K-Mittel-Clustering-Algorithmus berechnet die Schwerpunkte und iteriert, bis der optimale Schwerpunkt gefunden ist. Es wird davon ausgegangen, dass die Anzahl der Cluster bereits bekannt ist. Es wird auch genanntflat clusteringAlgorithmus. Die Anzahl von Clustern, die durch einen Algorithmus aus Daten identifiziert wurden, wird in K-Mitteln durch 'K' dargestellt.

Bei diesem Algorithmus werden die Datenpunkte einem Cluster so zugewiesen, dass die Summe des quadratischen Abstands zwischen den Datenpunkten und dem Schwerpunkt minimal wäre. Es versteht sich, dass eine geringere Variation innerhalb der Cluster zu ähnlicheren Datenpunkten innerhalb desselben Clusters führt.

Arbeitsweise des K-Means-Algorithmus

Wir können die Funktionsweise des K-Means-Clustering-Algorithmus mithilfe der folgenden Schritte verstehen:

  • Step 1 - Zuerst müssen wir die Anzahl der Cluster K angeben, die von diesem Algorithmus generiert werden müssen.

  • Step 2- Wählen Sie anschließend zufällig K Datenpunkte aus und weisen Sie jeden Datenpunkt einem Cluster zu. Klassifizieren Sie die Daten in einfachen Worten anhand der Anzahl der Datenpunkte.

  • Step 3 - Jetzt werden die Cluster-Schwerpunkte berechnet.

  • Step 4 - Als nächstes wiederholen Sie Folgendes, bis wir den optimalen Schwerpunkt gefunden haben, bei dem es sich um die Zuordnung von Datenpunkten zu den Clustern handelt, die sich nicht mehr ändern.

4.1 - Zunächst wird die Summe der quadratischen Abstände zwischen Datenpunkten und Schwerpunkten berechnet.

4.2 - Jetzt müssen wir jeden Datenpunkt dem Cluster zuweisen, der näher als der andere Cluster (Schwerpunkt) liegt.

4.3 - Berechnen Sie zuletzt die Schwerpunkte für die Cluster, indem Sie den Durchschnitt aller Datenpunkte dieses Clusters berechnen.

K-Mittel folgt Expectation-MaximizationAnsatz zur Lösung des Problems. Der Erwartungsschritt wird verwendet, um die Datenpunkte dem nächstgelegenen Cluster zuzuweisen, und der Maximierungsschritt wird verwendet, um den Schwerpunkt jedes Clusters zu berechnen.

Während wir mit dem K-Means-Algorithmus arbeiten, müssen wir uns um folgende Dinge kümmern:

  • Bei der Arbeit mit Clustering-Algorithmen einschließlich K-Means wird empfohlen, die Daten zu standardisieren, da solche Algorithmen entfernungsbasierte Messungen verwenden, um die Ähnlichkeit zwischen Datenpunkten zu bestimmen.

  • Aufgrund der iterativen Natur von K-Means und der zufälligen Initialisierung von Zentroiden können K-Means in einem lokalen Optimum bleiben und möglicherweise nicht zum globalen Optimum konvergieren. Aus diesem Grund wird empfohlen, unterschiedliche Initialisierungen von Zentroiden zu verwenden.

Implementierung in Python

Die folgenden zwei Beispiele für die Implementierung des K-Means-Clustering-Algorithmus helfen uns beim besseren Verständnis:

Beispiel 1

Es ist ein einfaches Beispiel, um zu verstehen, wie k-means funktioniert. In diesem Beispiel werden wir zuerst einen 2D-Datensatz mit 4 verschiedenen Blobs generieren und danach den k-means-Algorithmus anwenden, um das Ergebnis zu sehen.

Zunächst importieren wir die erforderlichen Pakete -

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans

Der folgende Code generiert die 2D-Datei mit vier Blobs:

from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)

Als nächstes hilft uns der folgende Code bei der Visualisierung des Datensatzes -

plt.scatter(X[:, 0], X[:, 1], s=20);
plt.show()

Erstellen Sie als Nächstes ein Objekt aus KMeans und geben Sie die Anzahl der Cluster an, trainieren Sie das Modell und führen Sie die Vorhersage wie folgt durch:

kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

Mit Hilfe des folgenden Codes können wir nun die vom Python-Schätzer k-means ausgewählten Cluster-Zentren zeichnen und visualisieren.

plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=20, cmap='summer')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='blue', s=100, alpha=0.9);
plt.show()

Beispiel 2

Gehen wir zu einem anderen Beispiel über, in dem wir K-Means-Clustering auf einfache Ziffern anwenden. K-means versucht, ähnliche Ziffern zu identifizieren, ohne die ursprünglichen Etiketteninformationen zu verwenden.

Zunächst importieren wir die erforderlichen Pakete -

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans

Laden Sie als Nächstes das Ziffern-Dataset von sklearn und erstellen Sie ein Objekt daraus. Wir können die Anzahl der Zeilen und Spalten in diesem Datensatz auch wie folgt ermitteln:

from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Ausgabe

(1797, 64)

Die obige Ausgabe zeigt, dass dieser Datensatz 1797 Beispiele mit 64 Funktionen enthält.

Wir können das Clustering wie in Beispiel 1 oben durchführen -

kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape

Ausgabe

(10, 64)

Die obige Ausgabe zeigt, dass K-means 10 Cluster mit 64 Merkmalen erstellt hat.

fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
   axi.set(xticks=[], yticks=[])
   axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)

Ausgabe

Als Ausgabe erhalten wir das folgende Bild, das Cluster-Zentren zeigt, die mit k-Mitteln gelernt wurden.

In den folgenden Codezeilen werden die gelernten Cluster-Labels mit den darin enthaltenen True-Labels abgeglichen.

from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
   mask = (clusters == i)
   labels[mask] = mode(digits.target[mask])[0]

Als nächstes können wir die Genauigkeit wie folgt überprüfen:

from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)

Ausgabe

0.7935447968836951

Die obige Ausgabe zeigt, dass die Genauigkeit bei etwa 80% liegt.

Vorteile und Nachteile

Vorteile

Im Folgenden sind einige Vorteile von K-Means-Clustering-Algorithmen aufgeführt:

  • Es ist sehr einfach zu verstehen und umzusetzen.

  • Wenn wir dann eine große Anzahl von Variablen haben, wäre K-means schneller als hierarchisches Clustering.

  • Bei der Neuberechnung von Zentroiden kann eine Instanz den Cluster ändern.

  • Engere Cluster werden mit K-Mitteln im Vergleich zu hierarchischen Clustern gebildet.

Nachteile

Im Folgenden sind einige Nachteile von K-Means-Clustering-Algorithmen aufgeführt:

  • Es ist etwas schwierig, die Anzahl der Cluster vorherzusagen, dh den Wert von k.

  • Die Ausgabe wird stark von anfänglichen Eingaben wie der Anzahl der Cluster (Wert von k) beeinflusst.

  • Die Reihenfolge der Daten hat starken Einfluss auf die endgültige Ausgabe.

  • Es ist sehr empfindlich gegen Neuskalierungen. Wenn wir unsere Daten durch Normalisierung oder Standardisierung neu skalieren, ändert sich die Ausgabe vollständig.

  • Es ist nicht gut, Clusterarbeit zu leisten, wenn die Cluster eine komplizierte geometrische Form haben.

Anwendungen des K-Means-Clustering-Algorithmus

Die Hauptziele der Clusteranalyse sind:

  • Um eine aussagekräftige Intuition aus den Daten zu erhalten, mit denen wir arbeiten.

  • Cluster-dann-vorhersagen, wo verschiedene Modelle für verschiedene Untergruppen erstellt werden.

Um die oben genannten Ziele zu erreichen, funktioniert K-means Clustering gut genug. Es kann in folgenden Anwendungen verwendet werden -

  • Marktsegmentierung

  • Dokumentenclustering

  • Bildsegmentierung

  • Bildkompression

  • Kundensegmentierung

  • Analyse des Trends bei dynamischen Daten