K bedeutet Clustering in R mit Beispiel

Inhaltsverzeichnis:

Anonim

In diesem Tutorial lernen Sie

  • Was ist Clusteranalyse?
  • K-bedeutet Algorithmus
  • Optimal k

Was ist Clusteranalyse?

Die Clusteranalyse ist Teil des unbeaufsichtigten Lernens . Ein Cluster ist eine Gruppe von Daten, die ähnliche Funktionen aufweisen. Wir können sagen, bei der Clusteranalyse geht es mehr um Entdeckung als um eine Vorhersage. Die Maschine sucht nach Ähnlichkeit in den Daten. Beispielsweise können Sie die Clusteranalyse für die folgende Anwendung verwenden:

  • Kundensegmentierung: Sucht nach Ähnlichkeit zwischen Kundengruppen
  • Börsenclustering: Gruppenaktien basierend auf Performances
  • Reduzieren Sie die Dimensionalität eines Datensatzes, indem Sie Beobachtungen mit ähnlichen Werten gruppieren

Die Clusteranalyse ist nicht allzu schwierig zu implementieren und für Unternehmen sowohl sinnvoll als auch umsetzbar.

Der auffälligste Unterschied zwischen überwachtem und unbeaufsichtigtem Lernen liegt in den Ergebnissen. Unüberwachtes Lernen erzeugt eine neue Variable, das Label, während überwachtes Lernen ein Ergebnis vorhersagt. Die Maschine hilft dem Praktiker bei der Suche nach Kennzeichnung der Daten auf der Grundlage einer engen Verwandtschaft. Es ist Sache des Analytikers, die Gruppen zu nutzen und ihnen einen Namen zu geben.

Lassen Sie uns ein Beispiel machen, um das Konzept des Clustering zu verstehen. Der Einfachheit halber arbeiten wir in zwei Dimensionen. Sie haben Daten über die Gesamtausgaben der Kunden und deren Alter. Um die Werbung zu verbessern, möchte das Marketingteam gezieltere E-Mails an seine Kunden senden.

In der folgenden Grafik zeichnen Sie die Gesamtausgaben und das Alter der Kunden auf.

library(ggplot2)df <- data.frame(age = c(18, 21, 22, 24, 26, 26, 27, 30, 31, 35, 39, 40, 41, 42, 44, 46, 47, 48, 49, 54),spend = c(10, 11, 22, 15, 12, 13, 14, 33, 39, 37, 44, 27, 29, 20, 28, 21, 30, 31, 23, 24))ggplot(df, aes(x = age, y = spend)) +geom_point()

An dieser Stelle ist ein Muster sichtbar

  1. Unten links sehen Sie junge Menschen mit geringerer Kaufkraft
  2. Die obere Mitte spiegelt Menschen mit einem Job wider, den sie sich leisten können, mehr auszugeben
  3. Schließlich ältere Menschen mit einem geringeren Budget.

In der obigen Abbildung gruppieren Sie die Beobachtungen von Hand und definieren jede der drei Gruppen. Dieses Beispiel ist etwas unkompliziert und sehr visuell. Wenn neue Beobachtungen an den Datensatz angehängt werden, können Sie sie innerhalb der Kreise kennzeichnen. Sie definieren den Kreis basierend auf unserem Urteil. Stattdessen können Sie maschinelles Lernen verwenden, um die Daten objektiv zu gruppieren.

In diesem Tutorial lernen Sie, wie Sie den k-means- Algorithmus verwenden.

K-bedeutet Algorithmus

K-mean ist ohne Zweifel die beliebteste Clustering-Methode. Die Forscher haben den Algorithmus vor Jahrzehnten veröffentlicht, und viele Verbesserungen wurden an k-means vorgenommen.

Der Algorithmus versucht, Gruppen zu finden, indem er den Abstand zwischen den Beobachtungen minimiert, die als lokale optimale Lösungen bezeichnet werden. Die Abstände werden anhand der Koordinaten der Beobachtungen gemessen. Zum Beispiel sind in einem zweidimensionalen Raum die Koordinaten einfach und.

Der Algorithmus funktioniert wie folgt:

  • Schritt 1: Wählen Sie zufällig Gruppen im Feature-Plan aus
  • Schritt 2: Minimieren Sie den Abstand zwischen dem Clusterzentrum und den verschiedenen Beobachtungen ( Schwerpunkt ). Es ergeben sich Gruppen mit Beobachtungen
  • Schritt 3: Verschieben Sie den Anfangsschwerpunkt auf den Mittelwert der Koordinaten innerhalb einer Gruppe.
  • Schritt 4: Minimieren Sie den Abstand entsprechend den neuen Zentroiden. Neue Grenzen werden geschaffen. Somit bewegen sich die Beobachtungen von einer Gruppe zur anderen
  • Wiederholen, bis keine Beobachtung die Gruppe wechselt

K-means nimmt normalerweise den euklidischen Abstand zwischen dem Merkmal und dem Merkmal:

Es stehen verschiedene Messgrößen zur Verfügung, z. B. die Manhattan-Entfernung oder die Minlowski-Entfernung. Beachten Sie, dass K-mean jedes Mal, wenn Sie den Algorithmus ausführen, unterschiedliche Gruppen zurückgibt. Denken Sie daran, dass die ersten anfänglichen Vermutungen zufällig sind, und berechnen Sie die Entfernungen, bis der Algorithmus innerhalb von Gruppen eine Homogenität erreicht. Das heißt, k-mean reagiert sehr empfindlich auf die erste Wahl, und wenn die Anzahl der Beobachtungen und Gruppen nicht gering ist, ist es fast unmöglich, die gleiche Clusterbildung zu erzielen.

Wählen Sie die Anzahl der Cluster

Eine weitere Schwierigkeit bei k-mean ist die Wahl der Anzahl der Cluster. Sie können einen hohen Wert von, dh eine große Anzahl von Gruppen, festlegen , um die Stabilität zu verbessern, es kann jedoch zu einer Überanpassung der Daten kommen. Überanpassung bedeutet, dass die Leistung des Modells für neu kommende Daten erheblich abnimmt. Die Maschine lernte die kleinen Details des Datensatzes und bemühte sich, das Gesamtmuster zu verallgemeinern.

Die Anzahl der Cluster hängt von der Art des Datensatzes, der Branche, dem Unternehmen usw. ab. Es gibt jedoch eine Faustregel, um die entsprechende Anzahl von Clustern auszuwählen:

mit entspricht der Anzahl der Beobachtungen im Datensatz.

Im Allgemeinen ist es interessant, Zeit damit zu verbringen, nach dem besten Wert zu suchen, der den geschäftlichen Anforderungen entspricht.

Wir werden den Datensatz "Preise für Personal Computer" verwenden, um unsere Clusteranalyse durchzuführen. Dieser Datensatz enthält 6259 Beobachtungen und 10 Merkmale. Der Datensatz beobachtet den Preis von 1993 bis 1995 für 486 PCs in den USA. Die Variablen sind unter anderem Preis, Geschwindigkeit, RAM, Bildschirm, CD.

Sie werden wie folgt vorgehen:

  • Daten importieren
  • Trainiere das Modell
  • Bewerten Sie das Modell

Daten importieren

K bedeutet nicht für Faktorvariablen geeignet, da es auf dem Abstand basiert und diskrete Werte keine aussagekräftigen Werte zurückgeben. Sie können die drei kategorialen Variablen in unserem Datensatz löschen. Außerdem fehlen in diesem Datensatz keine Werte.

library(dplyr)PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv"df <- read.csv(PATH) %>%select(-c(X, cd, multi, premium))glimpse(df)
Ausgabe
## Observations: 6, 259## Variables: 7## $ price < int > 1499, 1795, 1595, 1849, 3295, 3695, 1720, 1995, 2225, 2… ##$ speed < int > 25, 33, 25, 25, 33, 66, 25, 50, 50, 50, 33, 66, 50, 25,… ##$ hd < int > 80, 85, 170, 170, 340, 340, 170, 85, 210, 210, 170, 210… ##$ ram < int > 4, 2, 4, 8, 16, 16, 4, 2, 8, 4, 8, 8, 4, 8, 8, 4, 2, 4,… ##$ screen < int > 14, 14, 15, 14, 14, 14, 14, 14, 14, 15, 15, 14, 14, 14,… ##$ ads < int > 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,… ## $ trend  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1… 

In der zusammenfassenden Statistik können Sie sehen, dass die Daten große Werte haben. Eine gute Praxis bei der Berechnung des k-Mittelwerts und der Entfernung besteht darin, die Daten so neu zu skalieren, dass der Mittelwert gleich Eins und die Standardabweichung gleich Null ist.

summary(df)

Ausgabe:

## price speed hd ram## Min. : 949 Min. : 25.00 Min. : 80.0 Min. : 2.000## 1st Qu.:1794 1st Qu.: 33.00 1st Qu.: 214.0 1st Qu.: 4.000 `## Median :2144 Median : 50.00 Median : 340.0 Median : 8.000## Mean :2220 Mean : 52.01 Mean : 416.6 Mean : 8.287## 3rd Qu.:2595 3rd Qu.: 66.00 3rd Qu.: 528.0 3rd Qu.: 8.000## Max. :5399 Max. :100.00 Max. :2100.0 Max. :32.000## screen ads trend## Min. :14.00 Min. : 39.0 Min. : 1.00## 1st Qu.:14.00 1st Qu.:162.5 1st Qu.:10.00## Median :14.00 Median :246.0 Median :16.00## Mean :14.61 Mean :221.3 Mean :15.93## 3rd Qu.:15.00 3rd Qu.:275.0 3rd Qu.:21.50## Max. :17.00 Max. :339.0 Max. :35.00

Sie skalieren die Variablen mit der Funktion scale () der dplyr-Bibliothek neu. Die Transformation reduziert die Auswirkungen von Ausreißern und ermöglicht den Vergleich einer einzigen Beobachtung mit dem Mittelwert. Wenn ein standardisierter Wert (oder Z-Score ) hoch ist, können Sie sicher sein, dass diese Beobachtung tatsächlich über dem Mittelwert liegt (ein großer Z-Score impliziert, dass dieser Punkt in Bezug auf die Standardabweichung weit vom Mittelwert entfernt ist. A z- Ein Wert von zwei gibt an, dass der Wert 2 Standardabweichungen vom Mittelwert entfernt ist. Beachten Sie, dass der Z-Wert einer Gaußschen Verteilung folgt und symmetrisch zum Mittelwert ist.

rescale_df <- df % > %mutate(price_scal = scale(price),hd_scal = scale(hd),ram_scal = scale(ram),screen_scal = scale(screen),ads_scal = scale(ads),trend_scal = scale(trend)) % > %select(-c(price, speed, hd, ram, screen, ads, trend))

Die R-Basis hat eine Funktion zum Ausführen des k-Mittelwert-Algorithmus. Die Grundfunktion von k mean ist:

kmeans(df, k)arguments:-df: dataset used to run the algorithm-k: Number of clusters

Trainiere das Modell

In Abbildung drei haben Sie detailliert beschrieben, wie der Algorithmus funktioniert. Sie können jeden Schritt grafisch mit dem großartigen Paket von Yi Hui (ebenfalls Schöpfer von Knit for Rmarkdown) sehen. Die Paketanimation ist in der Conda-Bibliothek nicht verfügbar. Sie können das Paket auch auf andere Weise mit install.packages ("Animation") installieren. Sie können überprüfen, ob das Paket in unserem Anaconda-Ordner installiert ist.

install.packages("animation") 

Nachdem Sie die Bibliothek geladen haben, fügen Sie nach kmeans .ani hinzu, und R zeichnet alle Schritte auf. Zur Veranschaulichung führen Sie den Algorithmus nur mit den neu skalierten Variablen hd und ram mit drei Clustern aus.

set.seed(2345)library(animation)kmeans.ani(rescale_df[2:3], 3)

Code Erklärung

  • kmeans.ani (residale_df [2: 3], 3): Wählen Sie die Spalten 2 und 3 des Datensatzes "rescale_df" aus und führen Sie den Algorithmus mit k Sätzen auf 3 aus. Zeichnen Sie die Animation.

Sie können die Animation wie folgt interpretieren:

  • Schritt 1: R wählt zufällig drei Punkte aus
  • Schritt 2: Berechnen Sie den euklidischen Abstand und zeichnen Sie die Cluster. Unten links befindet sich ein grüner Cluster, rechts ein großer schwarzer und rechts ein roter Cluster.
  • Schritt 3: Berechnen Sie den Schwerpunkt, dh den Mittelwert der Cluster
  • Wiederholen, bis keine Daten den Cluster ändern

Der Algorithmus konvergierte nach sieben Iterationen. Sie können den k-mean-Algorithmus in unserem Datensatz mit fünf Clustern ausführen und ihn pc_cluster nennen.

pc_cluster <-kmeans(rescale_df, 5)
  • Die Liste pc_cluster enthält sieben interessante Elemente:
  • pc_cluster $ cluster: Gibt den Cluster jeder Beobachtung an
  • pc_cluster $ center: Die Cluster-Zentren
  • pc_cluster $ totss: Die Gesamtsumme der Quadrate
  • pc_cluster $ insidess: Innerhalb der Quadratsumme. Die Anzahl der zurückgegebenen Komponenten ist gleich "k"
  • pc_cluster $ tot.withinss: Summe der Innereien
  • pc_clusterbetweenss: Gesamtsumme des Quadrats minus Innerhalb der Quadratsumme
  • pc_cluster $ size: Anzahl der Beobachtungen in jedem Cluster

Sie werden die Summe der inneren Quadratsumme (dh tot.withinss) verwenden, um die optimale Anzahl von Clustern k zu berechnen. K zu finden ist in der Tat eine wesentliche Aufgabe.

Optimal k

Eine Technik zur Auswahl des besten k wird als Ellbogenmethode bezeichnet . Diese Methode verwendet die gruppeninterne Homogenität oder die gruppeninterne Heterogenität, um die Variabilität zu bewerten. Mit anderen Worten, Sie interessieren sich für den Prozentsatz der Varianz, der von jedem Cluster erklärt wird. Sie können erwarten, dass die Variabilität mit der Anzahl der Cluster zunimmt, alternativ nimmt die Heterogenität ab. Unsere Herausforderung besteht darin, das k zu finden, das jenseits der sinkenden Renditen liegt. Das Hinzufügen eines neuen Clusters verbessert die Variabilität der Daten nicht, da nur noch sehr wenige Informationen zu erklären sind.

In diesem Tutorial finden wir diesen Punkt anhand des Heterogenitätsmaßes. Die Summe der Quadrate innerhalb der Cluster ist die Summe innerhalb der Liste, die von kmean () zurückgegeben wird.

Sie können den Ellbogengraphen wie folgt konstruieren und das optimale k finden:

  • Schritt 1: Konstruieren Sie eine Funktion, um die Summe der Quadrate innerhalb der Cluster zu berechnen
  • Schritt 2: Führen Sie die Algorithmuszeiten aus
  • Schritt 3: Erstellen Sie einen Datenrahmen mit den Ergebnissen des Algorithmus
  • Schritt 4: Zeichnen Sie die Ergebnisse

Schritt 1) Konstruieren Sie eine Funktion, um die Summe der Quadrate innerhalb der Cluster zu berechnen

Sie erstellen die Funktion, mit der der k-Mittelwert-Algorithmus ausgeführt wird, und speichern die Summe innerhalb der Cluster-Quadratsumme

kmean_withinss <- function(k) {cluster <- kmeans(rescale_df, k)return (cluster$tot.withinss)}

Code Erklärung

  • Funktion (k): Legen Sie die Anzahl der Argumente in der Funktion fest
  • kmeans (residale_df, k): Führen Sie den Algorithmus k-mal aus
  • return (cluster $ tot.withinss): Speichern Sie die Summe innerhalb der Cluster-Quadratsumme

Sie können die Funktion mit 2 testen.

Ausgabe:

## Try with 2 cluster
kmean_withinss(2)

Ausgabe:

## [1] 27087.07 

Schritt 2) Führen Sie den Algorithmus n Mal aus

Mit der Funktion sapply () können Sie den Algorithmus über einen Bereich von k ausführen. Diese Technik ist schneller als das Erstellen einer Schleife und das Speichern des Werts.

# Set maximum clustermax_k <-20# Run algorithm over a range of kwss <- sapply(2:max_k, kmean_withinss)

Code Erklärung

  • max_k <-20: Legen Sie eine maximale Anzahl von 20 fest
  • sapply (2: max_k, kmean_withinss): Führen Sie die Funktion kmean_withinss () über einen Bereich von 2: max_k aus, dh 2 bis 20.

Schritt 3) Erstellen Sie einen Datenrahmen mit den Ergebnissen des Algorithmus

Nach der Erstellung und dem Testen unserer Funktion können Sie den k-Mittelwert-Algorithmus über einen Bereich von 2 bis 20 ausführen und die tot.withinss-Werte speichern.

# Create a data frame to plot the graphelbow <-data.frame(2:max_k, wss)

Code Erklärung

  • data.frame (2: max_k, wss): Erstellen Sie einen Datenrahmen mit der Ausgabe des Algorithmusspeichers in wss

Schritt 4) Zeichnen Sie die Ergebnisse

Sie zeichnen das Diagramm, um zu visualisieren, wo sich der Ellbogenpunkt befindet

# Plot the graph with gglopggplot(elbow, aes(x = X2.max_k, y = wss)) +geom_point() +geom_line() +scale_x_continuous(breaks = seq(1, 20, by = 1))

In der Grafik sehen Sie, dass das optimale k sieben ist, wobei die Kurve eine abnehmende Rendite aufweist.

Sobald Sie unser optimales k haben, führen Sie den Algorithmus mit k gleich 7 erneut aus und bewerten die Cluster.

Untersuchen des Clusters

pc_cluster_2 <-kmeans(rescale_df, 7)

Wie bereits erwähnt, können Sie auf die verbleibenden interessanten Informationen in der von kmean () zurückgegebenen Liste zugreifen.

pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size 

Der Bewertungsteil ist subjektiv und beruht auf der Verwendung des Algorithmus. Unser Ziel ist es, Computer mit ähnlichen Funktionen zu sammeln. Ein Computer-Typ kann die Arbeit von Hand erledigen und Computer basierend auf seinem Fachwissen gruppieren. Der Vorgang nimmt jedoch viel Zeit in Anspruch und ist fehleranfällig. Der K-Mittelwert-Algorithmus kann das Feld für ihn / sie vorbereiten, indem er Cluster vorschlägt.

Als vorherige Bewertung können Sie die Größe der Cluster untersuchen.

pc_cluster_2$size

Ausgabe:

## [1] 608 1596 1231 580 1003 699 542

Der erste Cluster besteht aus 608 Beobachtungen, während der kleinste Cluster, Nummer 4, nur 580 Computer hat. Es kann gut sein, eine Homogenität zwischen den Clustern zu haben. Andernfalls ist möglicherweise eine dünnere Datenaufbereitung erforderlich.

Mit der Mittelkomponente erhalten Sie einen tieferen Einblick in die Daten. Die Zeilen beziehen sich auf die Nummerierung des Clusters und die Spalten auf die vom Algorithmus verwendeten Variablen. Die Werte sind die durchschnittliche Punktzahl jedes Clusters für die interessierte Spalte. Standardisierung erleichtert die Interpretation. Positive Werte zeigen an, dass der Z-Score für einen bestimmten Cluster über dem Gesamtmittelwert liegt. Zum Beispiel hat Cluster 2 den höchsten Preisdurchschnitt unter allen Clustern.

center <-pc_cluster_2$centerscenter

Ausgabe:

## price_scal hd_scal ram_scal screen_scal ads_scal trend_scal## 1 -0.6372457 -0.7097995 -0.691520682 -0.4401632 0.6780366 -0.3379751## 2 -0.1323863 0.6299541 0.004786730 2.6419582 -0.8894946 1.2673184## 3 0.8745816 0.2574164 0.513105797 -0.2003237 0.6734261 -0.3300536## 4 1.0912296 -0.2401936 0.006526723 2.6419582 0.4704301 -0.4132057## 5 -0.8155183 0.2814882 -0.307621003 -0.3205176 -0.9052979 1.2177279## 6 0.8830191 2.1019454 2.168706085 0.4492922 -0.9035248 1.2069855## 7 0.2215678 -0.7132577 -0.318050275 -0.3878782 -1.3206229 -1.5490909

Sie können mit ggplot eine Heatmap erstellen, um den Unterschied zwischen den Kategorien hervorzuheben.

Die Standardfarben von ggplot müssen mit der RColorBrewer-Bibliothek geändert werden. Sie können die Conda-Bibliothek und den Code verwenden, um im Terminal zu starten:

conda install -cr r-rcolorbrewer

Um eine Heatmap zu erstellen, gehen Sie in drei Schritten vor:

  • Erstellen Sie einen Datenrahmen mit den Werten des Zentrums und erstellen Sie eine Variable mit der Nummer des Clusters
  • Formen Sie die Daten mit der Funktion collect () der Tidyr-Bibliothek neu. Sie möchten Daten von breit nach lang transformieren.
  • Erstellen Sie die Farbpalette mit der Funktion colorRampPalette ()

Schritt 1) Erstellen Sie einen Datenrahmen

Lassen Sie uns den Umformungsdatensatz erstellen

library(tidyr)# create dataset with the cluster numbercluster <- c(1: 7)center_df <- data.frame(cluster, center)# Reshape the datacenter_reshape <- gather(center_df, features, values, price_scal: trend_scal)head(center_reshape)

Ausgabe:

## cluster features values## 1 1 price_scal -0.6372457## 2 2 price_scal -0.1323863## 3 3 price_scal 0.8745816## 4 4 price_scal 1.0912296## 5 5 price_scal -0.8155183## 6 6 price_scal 0.8830191

Schritt 2) Formen Sie die Daten neu

Mit dem folgenden Code wird die Farbpalette erstellt, mit der Sie die Heatmap zeichnen.

library(RColorBrewer)# Create the palettehm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')

Schritt 3) Visualisieren

Sie können das Diagramm zeichnen und sehen, wie die Cluster aussehen.

# Plot the heat mapggplot(data = center_reshape, aes(x = features, y = cluster, fill = values)) +scale_y_continuous(breaks = seq(1, 7, by = 1)) +geom_tile() +coord_equal() +scale_fill_gradientn(colours = hm.palette(90)) +theme_classic()

Zusammenfassung

Wir können den k-Mittelwert-Algorithmus in der folgenden Tabelle zusammenfassen

Paket

Zielsetzung

Funktion

Streit

Base

Trainiere k-mean

kmeans ()

df, k

Zugriff auf Cluster

kmeans () $ cluster

Cluster-Zentren

kmeans () $ Zentren

Clustergröße

kmeans () $ Größe