logo

K-Means-Clustering-Algorithmus

K-Means Clustering ist ein unbeaufsichtigter Lernalgorithmus, der zur Lösung von Clustering-Problemen beim maschinellen Lernen oder in der Datenwissenschaft verwendet wird. In diesem Thema erfahren wir, was der K-Means-Clustering-Algorithmus ist, wie der Algorithmus funktioniert und wie die Python-Implementierung des K-Means-Clusterings aussieht.

Was ist der K-Means-Algorithmus?

K-Means-Clustering ist ein Algorithmus für unbeaufsichtigtes Lernen , wodurch der unbeschriftete Datensatz in verschiedene Cluster gruppiert wird. Hier definiert K die Anzahl der vordefinierten Cluster, die im Prozess erstellt werden müssen. Wenn K=2 ist, gibt es zwei Cluster, und für K=3 gibt es drei Cluster und so weiter.

Es handelt sich um einen iterativen Algorithmus, der den unbeschrifteten Datensatz so in k verschiedene Cluster unterteilt, dass jeder Datensatz nur zu einer Gruppe mit ähnlichen Eigenschaften gehört.

Es ermöglicht uns, die Daten in verschiedene Gruppen zu gruppieren und ist eine bequeme Möglichkeit, die Kategorien von Gruppen im unbeschrifteten Datensatz selbst zu ermitteln, ohne dass eine Schulung erforderlich ist.

„Was ist 10 von 100“

Es handelt sich um einen Schwerpunkt-basierten Algorithmus, bei dem jeder Cluster einem Schwerpunkt zugeordnet ist. Das Hauptziel dieses Algorithmus besteht darin, die Summe der Abstände zwischen dem Datenpunkt und den entsprechenden Clustern zu minimieren.

Der Algorithmus verwendet den unbeschrifteten Datensatz als Eingabe, unterteilt den Datensatz in k-Anzahl von Clustern und wiederholt den Vorgang, bis er nicht mehr die besten Cluster findet. Der Wert von k sollte in diesem Algorithmus vorbestimmt sein.

Das k-bedeutet Clusterbildung Der Algorithmus führt hauptsächlich zwei Aufgaben aus:

  • Bestimmt den besten Wert für K Mittelpunkte oder Schwerpunkte durch einen iterativen Prozess.
  • Weist jeden Datenpunkt seinem nächstgelegenen k-Zentrum zu. Die Datenpunkte, die sich in der Nähe des jeweiligen k-Zentrums befinden, bilden einen Cluster.

Daher verfügt jeder Cluster über Datenpunkte mit einigen Gemeinsamkeiten und ist von anderen Clustern entfernt.

Das folgende Diagramm erläutert die Funktionsweise des K-Means-Clustering-Algorithmus:

K-Means-Clustering-Algorithmus

Wie funktioniert der K-Means-Algorithmus?

Die Funktionsweise des K-Means-Algorithmus wird in den folgenden Schritten erklärt:

Schritt 1: Wählen Sie die Zahl K aus, um die Anzahl der Cluster zu bestimmen.

Schritt 2: Wählen Sie zufällige K-Punkte oder Schwerpunkte aus. (Es kann sich um einen anderen Eintrag als den Eingabedatensatz handeln).

Schritt 3: Ordnen Sie jeden Datenpunkt seinem nächstgelegenen Schwerpunkt zu, der die vordefinierten K-Cluster bildet.

Teilstring-Methode in Java

Schritt 4: Berechnen Sie die Varianz und platzieren Sie einen neuen Schwerpunkt für jeden Cluster.

Schritt 5: Wiederholen Sie den dritten Schritt, was bedeutet, dass Sie jeden Datenpunkt dem neuen nächstgelegenen Schwerpunkt jedes Clusters neu zuweisen.

Schritt 6: Wenn eine Neuzuweisung erfolgt, fahren Sie mit Schritt 4 fort, andernfalls mit FERTIGSTELLEN.

Schritt 7 : Das Modell ist fertig.

Lassen Sie uns die obigen Schritte verstehen, indem wir die visuellen Diagramme betrachten:

Angenommen, wir haben zwei Variablen M1 und M2. Das x-y-Achsen-Streudiagramm dieser beiden Variablen ist unten dargestellt:

K-Means-Clustering-Algorithmus
  • Nehmen wir die Anzahl k der Cluster, also K=2, um den Datensatz zu identifizieren und ihn in verschiedene Cluster einzuteilen. Das bedeutet, dass wir hier versuchen werden, diese Datensätze in zwei verschiedene Cluster zu gruppieren.
  • Wir müssen einige zufällige k Punkte oder Schwerpunkte auswählen, um den Cluster zu bilden. Diese Punkte können entweder die Punkte aus dem Datensatz oder ein beliebiger anderer Punkt sein. Hier wählen wir also die folgenden zwei Punkte als k Punkte aus, die nicht Teil unseres Datensatzes sind. Betrachten Sie das folgende Bild:
    K-Means-Clustering-Algorithmus
  • Jetzt ordnen wir jeden Datenpunkt des Streudiagramms seinem nächstgelegenen K-Punkt oder Schwerpunkt zu. Wir werden es berechnen, indem wir einige der von uns untersuchten Mathematik anwenden, um den Abstand zwischen zwei Punkten zu berechnen. Wir werden also einen Median zwischen beiden Schwerpunkten zeichnen. Betrachten Sie das folgende Bild:
    K-Means-Clustering-Algorithmus

Aus dem obigen Bild geht klar hervor, dass die Punkte auf der linken Seite der Linie in der Nähe des K1 oder blauen Schwerpunkts liegen und die Punkte auf der rechten Seite der Linie in der Nähe des gelben Schwerpunkts liegen. Färben wir sie zur klaren Visualisierung blau und gelb.

K-Means-Clustering-Algorithmus
  • Da wir den nächstgelegenen Cluster finden müssen, wiederholen wir den Vorgang durch Auswahl ein neuer Schwerpunkt . Um die neuen Schwerpunkte auszuwählen, berechnen wir den Schwerpunkt dieser Schwerpunkte und finden neue Schwerpunkte wie folgt:
    K-Means-Clustering-Algorithmus
  • Als nächstes werden wir jeden Datenpunkt dem neuen Schwerpunkt neu zuweisen. Dazu wiederholen wir den gleichen Vorgang zum Finden einer Mittellinie. Der Median wird wie im folgenden Bild aussehen:
    K-Means-Clustering-Algorithmus

Aus dem obigen Bild können wir ersehen, dass sich ein gelber Punkt auf der linken Seite der Linie und zwei blaue Punkte rechts von der Linie befinden. Diese drei Punkte werden also neuen Schwerpunkten zugewiesen.

K-Means-Clustering-Algorithmus

Da die Neuzuweisung stattgefunden hat, gehen wir wieder zu Schritt 4 über, bei dem es darum geht, neue Schwerpunkte oder K-Punkte zu finden.

  • Wir werden den Vorgang wiederholen, indem wir den Schwerpunkt der Schwerpunkte ermitteln, sodass die neuen Schwerpunkte wie im folgenden Bild dargestellt aussehen:
    K-Means-Clustering-Algorithmus
  • Sobald wir die neuen Schwerpunkte erhalten haben, werden wir erneut die Mittellinie zeichnen und die Datenpunkte neu zuweisen. Das Bild wird also sein:
    K-Means-Clustering-Algorithmus
  • Wir können im obigen Bild sehen; Es gibt keine unterschiedlichen Datenpunkte auf beiden Seiten der Linie, was bedeutet, dass unser Modell gebildet ist. Betrachten Sie das folgende Bild:
    K-Means-Clustering-Algorithmus

Da unser Modell fertig ist, können wir nun die angenommenen Schwerpunkte entfernen und die beiden endgültigen Cluster sehen wie im folgenden Bild aus:

K-Means-Clustering-Algorithmus

Wie wähle ich den Wert von „K Anzahl der Cluster“ beim K-Means-Clustering?

Die Leistung des K-Means-Clustering-Algorithmus hängt von den hocheffizienten Clustern ab, die er bildet. Die Auswahl der optimalen Clusteranzahl ist jedoch eine große Aufgabe. Es gibt verschiedene Möglichkeiten, die optimale Anzahl von Clustern zu ermitteln, aber hier besprechen wir die am besten geeignete Methode, um die Anzahl von Clustern oder den Wert von K zu ermitteln. Die Methode ist unten angegeben:

Ellenbogenmethode

Die Elbow-Methode ist eine der beliebtesten Methoden, um die optimale Anzahl von Clustern zu ermitteln. Diese Methode verwendet das Konzept des WCSS-Werts. WCSS steht für Innerhalb der Cluster-Quadratsumme , das die Gesamtvariationen innerhalb eines Clusters definiert. Die Formel zur Berechnung des WCSS-Werts (für 3 Cluster) ist unten angegeben:

WCSS= ∑Pich in Cluster1Abstand(SichC1)2+∑Pich in Cluster2Abstand(SichC2)2+∑Pich in CLuster3Abstand(SichC3)2

In der obigen Formel von WCSS gilt:

Pich in Cluster1Abstand(SichC1)2: Es ist die Summe des Quadrats der Abstände zwischen jedem Datenpunkt und seinem Schwerpunkt innerhalb eines Clusters1 und das Gleiche gilt für die anderen beiden Terme.

Um den Abstand zwischen Datenpunkten und Schwerpunkt zu messen, können wir jede Methode wie die euklidische Distanz oder die Manhattan-Distanz verwenden.

Um den optimalen Clusterwert zu ermitteln, führt die Ellbogenmethode die folgenden Schritte aus:

Mehrzeilige Kommentar-Powershell
  • Es führt das K-Means-Clustering für einen bestimmten Datensatz für verschiedene K-Werte (Bereiche von 1–10) aus.
  • Berechnet für jeden Wert von K den WCSS-Wert.
  • Zeichnet eine Kurve zwischen berechneten WCSS-Werten und der Anzahl der Cluster K.
  • Der scharfe Biegepunkt oder ein Punkt der Darstellung sieht aus wie ein Arm, dann wird dieser Punkt als der beste Wert von K betrachtet.

Da die Grafik die scharfe Biegung zeigt, die wie ein Ellenbogen aussieht, wird sie als Ellenbogenmethode bezeichnet. Das Diagramm für die Ellbogenmethode sieht wie im folgenden Bild aus:

K-Means-Clustering-Algorithmus

Hinweis: Wir können die Anzahl der Cluster entsprechend den angegebenen Datenpunkten wählen. Wenn wir die Anzahl der Cluster gleich den Datenpunkten wählen, wird der Wert von WCSS zu Null, und das ist der Endpunkt des Diagramms.

Python-Implementierung des K-Means-Clustering-Algorithmus

Im obigen Abschnitt haben wir den K-Means-Algorithmus besprochen. Sehen wir uns nun an, wie er mit implementiert werden kann Python .

Lassen Sie uns vor der Implementierung verstehen, welche Art von Problem wir hier lösen werden. Wir haben also einen Datensatz von Mall_Kunden Dabei handelt es sich um die Daten von Kunden, die das Einkaufszentrum besuchen und dort Geld ausgeben.

Im angegebenen Datensatz haben wir Kunden-ID, Geschlecht, Alter, Jahreseinkommen ($) und Ausgabenbewertung (Das ist der berechnete Wert dessen, wie viel ein Kunde im Einkaufszentrum ausgegeben hat. Je höher der Wert, desto mehr hat er ausgegeben.) Aus diesem Datensatz müssen wir einige Muster berechnen, da es sich um eine unbeaufsichtigte Methode handelt und wir nicht genau wissen, was wir berechnen sollen.

Die für die Umsetzung zu befolgenden Schritte sind nachstehend aufgeführt:

    Datenvorverarbeitung Finden der optimalen Anzahl von Clustern mithilfe der Ellenbogenmethode Training des K-Means-Algorithmus anhand des Trainingsdatensatzes Visualisierung der Cluster

Schritt 1: Datenvorverarbeitungsschritt

Der erste Schritt wird die Datenvorverarbeitung sein, wie wir es in unseren früheren Themen Regression und Klassifizierung getan haben. Beim Clustering-Problem unterscheidet es sich jedoch von anderen Modellen. Lassen Sie uns darüber diskutieren:

Java-Zeichen in Zeichenfolge umwandeln
    Bibliotheken importieren
    Wie in den vorherigen Themen werden wir zunächst die Bibliotheken für unser Modell importieren, was Teil der Datenvorverarbeitung ist. Der Code ist unten angegeben:
 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Im obigen Code ist die Numpy Wir haben für die Durchführung mathematischer Berechnungen importiert, matplotlib dient zum Zeichnen des Diagramms und Pandas dienen der Verwaltung des Datensatzes.

    Importieren des Datensatzes:
    Als nächstes importieren wir den Datensatz, den wir verwenden müssen. Hier verwenden wir also den Datensatz Mall_Customer_data.csv. Es kann mit dem folgenden Code importiert werden:
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Durch Ausführen der obigen Codezeilen erhalten wir unseren Datensatz in der Spyder-IDE. Der Datensatz sieht wie im folgenden Bild aus:

K-Means-Clustering-Algorithmus

Aus dem obigen Datensatz müssen wir einige Muster darin finden.

    Extrahieren unabhängiger Variablen

Hier benötigen wir keine abhängige Variable für den Datenvorverarbeitungsschritt, da es sich um ein Clustering-Problem handelt und wir keine Ahnung haben, was wir bestimmen sollen. Deshalb fügen wir einfach eine Codezeile für die Funktionsmatrix hinzu.

 x = dataset.iloc[:, [3, 4]].values 

Wie wir sehen, extrahieren wir nur 3rdund 4ThBesonderheit. Dies liegt daran, dass wir zur Visualisierung des Modells ein 2D-Diagramm benötigen und einige Funktionen nicht erforderlich sind, z. B. customer_id.

Schritt 2: Ermitteln der optimalen Anzahl von Clustern mithilfe der Ellenbogenmethode

Im zweiten Schritt werden wir versuchen, die optimale Anzahl an Clustern für unser Clustering-Problem zu finden. Daher verwenden wir hier, wie oben besprochen, zu diesem Zweck die Ellenbogenmethode.

Wie wir wissen, verwendet die Ellbogenmethode das WCSS-Konzept, um das Diagramm zu zeichnen, indem WCSS-Werte auf der Y-Achse und die Anzahl der Cluster auf der X-Achse aufgetragen werden. Wir berechnen also den Wert für WCSS für verschiedene k-Werte im Bereich von 1 bis 10. Nachfolgend finden Sie den Code dafür:

 #finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show() 

Wie wir im obigen Code sehen können, haben wir verwendet die KMeans Klasse von Sklearn. Cluster-Bibliothek zur Bildung der Cluster.

Als nächstes haben wir das erstellt wcss_list Variable zum Initialisieren einer leeren Liste, die den Wert von wcss enthält, der für verschiedene Werte von k im Bereich von 1 bis 10 berechnet wird.

Danach haben wir die for-Schleife für die Iteration mit einem anderen Wert von k im Bereich von 1 bis 10 initialisiert; Da die for-Schleife in Python das Ausgangslimit ausschließt, wird 11 angenommen, um 10 einzuschließenThWert.

Der restliche Teil des Codes ist ähnlich wie in früheren Themen, da wir das Modell an eine Feature-Matrix angepasst und dann den Graphen zwischen der Anzahl der Cluster und WCSS gezeichnet haben.

Ausgabe: Nachdem wir den obigen Code ausgeführt haben, erhalten wir die folgende Ausgabe:

K-Means-Clustering-Algorithmus

Aus der obigen Darstellung können wir erkennen, dass sich der Ellbogenpunkt befindet 5. Die Anzahl der Cluster beträgt hier also 5.

K-Means-Clustering-Algorithmus

Schritt 3: Training des K-Means-Algorithmus anhand des Trainingsdatensatzes

Da wir die Anzahl der Cluster haben, können wir das Modell nun anhand des Datensatzes trainieren.

Um das Modell zu trainieren, verwenden wir dieselben zwei Codezeilen wie im obigen Abschnitt, aber hier verwenden wir anstelle von i 5, da wir wissen, dass 5 Cluster gebildet werden müssen. Der Code ist unten angegeben:

 #training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x) 

Die erste Zeile ist dieselbe wie oben zum Erstellen des Objekts der KMeans-Klasse.

In der zweiten Codezeile haben wir die abhängige Variable erstellt y_predict um das Modell zu trainieren.

Durch Ausführen der obigen Codezeilen erhalten wir die Variable y_predict. Wir können es unten überprüfen der Variablen-Explorer Option in der Spyder-IDE. Wir können nun die Werte von y_predict mit unserem Originaldatensatz vergleichen. Betrachten Sie das folgende Bild:

K-Means-Clustering-Algorithmus

Aus dem obigen Bild können wir nun erkennen, dass die Kunden-ID 1 zu einem Cluster gehört

3 (da der Index bei 0 beginnt, wird 2 daher als 3 betrachtet) und 2 gehört zu Cluster 4 und so weiter.

Zeichenfolge und Teilzeichenfolge

Schritt 4: Visualisierung der Cluster

Der letzte Schritt besteht darin, die Cluster zu visualisieren. Da wir 5 Cluster für unser Modell haben, werden wir jeden Cluster einzeln visualisieren.

Zur Visualisierung der Cluster wird ein Streudiagramm mit der Funktion mtp.scatter() von matplotlib verwendet.

 #visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show() 

In den obigen Codezeilen haben wir Code für jeden Cluster im Bereich von 1 bis 5 geschrieben. Die erste Koordinate des mtp.scatter, d. h. x[y_predict == 0, 0], enthält den x-Wert für die Darstellung der Matrix von weist Werte auf, und y_predict liegt im Bereich von 0 bis 1.

Ausgabe:

K-Means-Clustering-Algorithmus

Das Ausgabebild zeigt deutlich die fünf verschiedenen Cluster mit unterschiedlichen Farben. Die Cluster werden zwischen zwei Parametern des Datensatzes gebildet; Jahreseinkommen der Kunden und Ausgaben. Wir können die Farben und Beschriftungen je nach Anforderung oder Wahl ändern. Wir können auch einige Punkte aus den oben genannten Mustern beobachten, die unten aufgeführt sind:

    Cluster1Zeigt die Kunden mit durchschnittlichem Gehalt und durchschnittlichen Ausgaben an, damit wir diese Kunden kategorisieren können
  • Cluster2 zeigt, dass der Kunde ein hohes Einkommen, aber geringe Ausgaben hat, sodass wir ihn kategorisieren können vorsichtig .
  • Cluster3 zeigt die geringen Einnahmen und auch die geringen Ausgaben, sodass diese als sinnvoll eingestuft werden können.
  • Cluster4 zeigt die Kunden mit geringem Einkommen und sehr hohen Ausgaben, sodass sie kategorisiert werden können leichtsinnig .
  • Cluster5 zeigt die Kunden mit hohem Einkommen und hohen Ausgaben an, sodass sie als Zielkunden kategorisiert werden können. Diese Kunden können für den Eigentümer des Einkaufszentrums die profitabelsten Kunden sein.