K-Mittel Clustering in R mit Beispiel

Was ist Cluster Analyse?

Cluster Analyse ist Teil der unbeaufsichtigtes Lernen. Ein Cluster ist eine Gruppe von Daten, die รคhnliche Merkmale aufweisen. Man kรถnnte sagen, dass es bei der Clusteranalyse eher um Entdeckung als um Vorhersage geht. Die Maschine sucht nach ร„hnlichkeiten in den Daten. Sie kรถnnen die Clusteranalyse beispielsweise fรผr die folgende Anwendung verwenden:

  • Kundensegmentierung: Sucht nach ร„hnlichkeiten zwischen Kundengruppen
  • Aktienmarktclustering: Aktien nach Performance gruppieren
  • Reduzieren Sie die Dimensionalitรคt eines Datensatzes, indem Sie Beobachtungen mit รคhnlichen Werten gruppieren

ClusterDie Implementierung einer Analyse ist nicht allzu schwierig und fรผr das Unternehmen sowohl sinnvoll als auch umsetzbar.

Der auffรคlligste Unterschied zwischen รผberwachtem und unรผberwachtem Lernen liegt in den Ergebnissen. Unรผberwachtes Lernen erzeugt eine neue Variable, die Bezeichnung, wรคhrend รผberwachtes Lernen ein Ergebnis vorhersagt. Die Maschine unterstรผtzt den Praktiker bei der Suche nach einer Kennzeichnung der Daten auf der Grundlage enger Zusammenhรคnge. 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 Clusterings 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 seinen Kunden gezieltere E-Mails senden.

In der folgenden Grafik stellen Sie die Gesamtausgaben und das Alter der Kunden dar.

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()

Cluster Analyse

An dieser Stelle ist ein Muster erkennbar

  1. Unten links sehen Sie junge Menschen mit geringerer Kaufkraft
  2. Die obere Mitte spiegelt Menschen wider, die einen Job haben, bei dem sie es sich leisten kรถnnen, mehr auszugeben
  3. Endlich รคltere Menschen mit geringerem Budget.

Cluster Analyse

In der obigen Abbildung clustern Sie die Beobachtungen manuell und definieren jede der drei Gruppen. Dieses Beispiel ist relativ unkompliziert und sehr anschaulich. Wenn dem Datensatz neue Beobachtungen hinzugefรผgt werden, kรถnnen Sie diese innerhalb der Kreise beschriften. Sie definieren den Kreis nach unserem Ermessen. Stattdessen kรถnnen Sie verwenden Maschinelles lernen um die Daten objektiv zu gruppieren.

In diesem Tutorial erfahren Sie, wie Sie die verwenden k-bedeutet Algorithmus.

K-means-Algorithmus

K-Mean ist ohne Zweifel die beliebteste Clustermethode. Forscher haben den Algorithmus vor Jahrzehnten verรถffentlicht und seitdem wurden viele Verbesserungen an K-Means vorgenommen.

Der Algorithmus versucht, Gruppen zu finden, indem er den Abstand zwischen den Beobachtungen minimiert lokal optimal Lรถsungen. Die Entfernungen werden anhand der Koordinaten der Beobachtungen gemessen. In einem zweidimensionalen Raum sind die Koordinaten beispielsweise einfach und .

K-bedeutet Algorithmus

Der Algorithmus funktioniert wie folgt:

  • Schritt 1: Wรคhlen Sie Gruppen im Funktionsplan nach dem Zufallsprinzip aus
  • Schritt 2: Minimieren Sie den Abstand zwischen dem Clusterzentrum und den verschiedenen Beobachtungen (Schwerpunkt). Es entstehen Gruppen mit Beobachtungen
  • Schritt 3: Shift vom anfรคnglichen Schwerpunkt zum Mittelwert der Koordinaten innerhalb einer Gruppe.
  • Schritt 4: Minimieren Sie den Abstand entsprechend den neuen Schwerpunkten. Neue Grenzen werden geschaffen. Somit werden Beobachtungen von einer Gruppe zur anderen verschoben
  • Wiederholen, bis keine Beobachtung die Gruppe รคndert

K-means verwendet normalerweise den euklidischen Abstand zwischen Merkmalen und Merkmalen:

K-bedeutet Algorithmus

Es stehen verschiedene MaรŸe zur Verfรผgung, wie etwa die Manhattan-Distanz oder die Minlowski-Distanz. Beachten Sie, dass K-Mean bei jedem Ausfรผhren des Algorithmus unterschiedliche Gruppen zurรผckgibt. Denken Sie daran, dass die ersten Schรคtzungen zufรคllig sind und die Distanzen so lange berechnet werden, bis der Algorithmus eine Homogenitรคt innerhalb der Gruppen erreicht. Das heiรŸt, K-Mean ist sehr empfindlich gegenรผber der ersten Wahl, und es ist fast unmรถglich, dieselbe Clusterung zu erhalten, es sei denn, die Anzahl der Beobachtungen und Gruppen ist klein.

Wรคhlen Sie die Anzahl der Cluster aus

Eine weitere Schwierigkeit bei k-mean ist die Wahl der Anzahl der Cluster. Sie kรถnnen einen hohen Wert festlegen, also eine groรŸe Anzahl von Gruppen, um die Stabilitรคt zu verbessern, aber am Ende erhalten Sie mรถglicherweise รผberangepasst von Daten. รœberanpassung bedeutet, dass die Leistung des Modells bei neuen Daten erheblich abnimmt. Die Maschine lernt die kleinen Details des Datensatzes und hat Schwierigkeiten, das Gesamtmuster zu verallgemeinern.

Die Anzahl der Cluster hรคngt von der Art des Datensatzes, der Branche, dem Geschรคft usw. ab. Es gibt jedoch eine Faustregel fรผr die Auswahl der geeigneten Clusteranzahl:

Wรคhlen Sie die Anzahl von aus Clusters

wobei gleich der Anzahl der Beobachtungen im Datensatz ist.

Im Allgemeinen ist es interessant, Zeit damit zu verbringen, nach dem besten Preis-Leistungs-Verhรคltnis zu suchen, das den Geschรคftsanforderungen entspricht.

Wir werden den Datensatz โ€žPreise fรผr Personalcomputerโ€œ verwenden, um unsere Clusteranalyse durchzufรผhren. Dieser Datensatz enthรคlt 6259 Beobachtungen und 10 Merkmale. Der Datensatz beobachtet den Preis von 1993 Personalcomputern in den USA von 1995 bis 486. Die Variablen sind unter anderem Preis, Geschwindigkeit, RAM, Bildschirm und CD.

Sie gehen wie folgt vor:

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

Daten importieren

K bedeutet, dass es nicht fรผr Faktorvariablen geeignet ist, da es auf der Distanz 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)

Ausgang

## 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  <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...

Anhand der zusammenfassenden Statistik kรถnnen Sie erkennen, dass die Daten groรŸe Werte aufweisen. Eine gute Vorgehensweise bei der k-Mittelwert- und Distanzberechnung besteht darin, die Daten so neu zu skalieren, dass der Mittelwert gleich eins und die Standardabweichung gleich null ist.

summary(df)

Ausgang:

##      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 den Einfluss von AusreiรŸern und ermรถglicht den Vergleich einer einzelnen Beobachtung mit dem Mittelwert. Wenn ein standardisierter Wert (bzw Z-Score) hoch ist, kรถnnen Sie sicher sein, dass diese Beobachtung tatsรคchlich รผber dem Mittelwert liegt (ein groรŸer Z-Score bedeutet, dass dieser Punkt hinsichtlich der Standardabweichung weit vom Mittelwert entfernt ist. Ein Z-Score von zwei zeigt an, dass der Wert 2 Standard ist Abweichungen vom Mittelwert. Beachten Sie, dass der Z-Score einer GauรŸschen Verteilung folgt und symmetrisch um den 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))

R Base verfรผgt รผber eine Funktion zum Ausfรผhren des k-Mean-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 der groรŸartigen Paketerstellung von Yi Hui (auch Schรถpfer von Knit fรผr 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 .ani nach kmeans und hinzu R stellt alle Schritte dar. 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(rescale_df[2:3], 3): Wรคhlen Sie die Spalten 2 und 3 des rescale_df-Datensatzes aus und fรผhren Sie den Algorithmus mit k-Sets auf 3 aus. Zeichnen Sie die Animation.

Trainiere das Modell

Trainiere das Modell

Sie kรถnnen die Animation wie folgt interpretieren:

  • Schritt 1: R wรคhlt zufรคllig drei Punkte aus
  • Schritt 2: Berechnen Sie die euklidische Distanz und zeichnen Sie die Cluster ein. Sie haben unten links einen grรผnen Cluster, rechts einen groรŸen schwarz gefรคrbten Cluster und dazwischen einen roten.
  • Schritt 3: Berechnen Sie den Schwerpunkt, also den Mittelwert der Cluster
  • Wiederholen, bis sich der Cluster nicht mehr von den Daten รคndert

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$centers: Die Clusterzentren
  • pc_cluster$totss: Die Gesamtsumme der Quadrate
  • pc_cluster$withinss: Innerhalb der Summe der Quadrate. Die Anzahl der zurรผckgegebenen Komponenten ist gleich `k`
  • pc_cluster$tot.withinss: Summe der Withinss
  • pc_clusterbetweenss: Gesamtsumme der Quadrate minus Innerhalbsumme der Quadrate
  • pc_cluster$size: Anzahl der Beobachtungen innerhalb jedes Clusters

Sie verwenden die Summe der quadrierten Werte innerhalb (also tot.withinss), um die optimale Anzahl von Clustern k zu berechnen. Die Ermittlung von k ist in der Tat eine umfangreiche Aufgabe.

Optimales k

Eine Technik zur Auswahl des besten k heiรŸt Ellbogenmethode. Diese Methode verwendet Homogenitรคt oder Heterogenitรคt innerhalb der Gruppe, um die Variabilitรคt zu bewerten. Mit anderen Worten, Sie sind an dem Prozentsatz der Varianz interessiert, der durch jeden Cluster erklรคrt wird. Sie kรถnnen davon ausgehen, dass die Variabilitรคt mit der Anzahl der Cluster zunimmt, wรคhrend die Heterogenitรคt abnimmt. Unsere Herausforderung besteht darin, das k zu finden, das jenseits der abnehmenden Ertrรคge liegt. Das Hinzufรผgen eines neuen Clusters verbessert die Variabilitรคt in den Daten nicht, da nur noch sehr wenige Informationen รผbrig sind, die erklรคrt werden mรผssen.

In diesem Tutorial finden wir diesen Punkt mithilfe des HeterogenitรคtsmaรŸes. Die Summe der Quadrate innerhalb der Cluster ist tot.withinss in der von kmean() zurรผckgegebenen Liste.

Sie kรถnnen das Ellbogendiagramm erstellen und das optimale k wie folgt ermitteln:

  • Schritt 1: Erstellen Sie eine Funktion zur Berechnung der Summe der Quadrate innerhalb der Cluster
  • Schritt 2: Fรผhren Sie den Algorithmus mal aus
  • Schritt 3: Erstellen Sie einen Datenrahmen mit den Ergebnissen des Algorithmus
  • Schritt 4: Zeichnen Sie die Ergebnisse grafisch auf

Schritt 1) Erstellen Sie eine Funktion zur Berechnung der Summe der Quadrate innerhalb von Clustern

Sie erstellen die Funktion, die den K-Mean-Algorithmus ausfรผhrt und die Summe der Quadrate innerhalb der Cluster speichert

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(rescale_df, k): Fรผhren Sie den Algorithmus k-mal aus
  • return(cluster$tot.withinss): Speichert die Summe der Quadrate innerhalb der Cluster

Sie kรถnnen die Funktion mit gleich 2 testen.

Ausgang:

## Try with 2 cluster
kmean_withinss(2)

Ausgang:

## [1] 27087.07

Schritt 2) Fรผhren Sie den Algorithmus n-mal aus

Sie verwenden die Funktion sapply(), um den Algorithmus รผber einen Bereich von k auszufรผhren. Diese Technik ist schneller als das Erstellen einer Schleife und das Speichern des Werts.

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

Code Erklรคrung

  • max_k <-20: Legen Sie die maximale Anzahl auf 20 fest
  • sapply(2:max_k, kmean_withinss): Fรผhren Sie die Funktion kmean_withinss() รผber einen Bereich von 2:max_k aus, also 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-mean-Algorithmus รผber einen Bereich von 2 bis 20 ausfรผhren und die tot.withinss-Werte speichern.

# Create a data frame to plot the graph
elbow <-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) Plotten Sie die Ergebnisse

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

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

Optimales k

Aus der Grafik kรถnnen Sie ersehen, dass das optimale k bei sieben liegt, wobei die Kurve beginnt, eine abnehmende Rendite zu erzielen.

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

Untersuchung 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$cluster
pc_cluster_2$centers
pc_cluster_2$size

Der Bewertungsteil ist subjektiv und beruht auf der Verwendung des Algorithmus. Unser Ziel hier ist es, Computer mit รคhnlichen Funktionen zu sammeln. Ein Computerfachmann kann die Arbeit manuell erledigen und Computer basierend auf seinem Fachwissen gruppieren. Der Prozess wird jedoch viel Zeit in Anspruch nehmen und fehleranfรคllig sein. Der K-Mean-Algorithmus kann das Feld fรผr ihn/sie vorbereiten, indem er Cluster vorschlรคgt.

Zur Vorabbewertung kรถnnen Sie sich die GrรถรŸe der Cluster ansehen.

pc_cluster_2$size

Ausgang:

## [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 kรถnnte gut sein, wenn zwischen den Clustern Homogenitรคt herrscht, andernfalls kรถnnte eine dรผnnere Datenaufbereitung erforderlich sein.

Mit der mittleren Komponente 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 der Durchschnittswert jedes Clusters fรผr die betreffende Spalte. Die Standardisierung erleichtert die Interpretation. Positive Werte zeigen an, dass der Z-Score fรผr einen bestimmten Cluster รผber dem Gesamtmittelwert liegt. Beispielsweise hat Cluster 2 den hรถchsten Preisdurchschnitt aller Cluster.

center <-pc_cluster_2$centers
center

Ausgang:

##   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 uns dabei zu helfen, den Unterschied zwischen Kategorien hervorzuheben.

Die Standardfarben von ggplot mรผssen mit der RColorBrewer-Bibliothek geรคndert werden. Sie kรถnnen die Conda verwenden und der Code zum Starten im Terminal:

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 โ€žgather()โ€œ der Tidyr-Bibliothek um. Sie mรถchten Daten von breit nach lang umwandeln.
  • Erstellen Sie die Farbpalette mit FarbeRampPalette()-Funktion

Schritt 1) Erstellen Sie einen Datenrahmen

Lassen Sie uns den Umformungsdatensatz erstellen

library(tidyr)

# create dataset with the cluster number

cluster <- c(1: 7)
center_df <- data.frame(cluster, center)

# Reshape the data

center_reshape <- gather(center_df, features, values, price_scal: trend_scal)
head(center_reshape)

Ausgang:

##   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 um

Mit dem folgenden Code erstellen Sie die Farbpalette, die Sie zum Zeichnen der Wรคrmekarte verwenden.

library(RColorBrewer)
# Create the palette
hm.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 map
ggplot(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()

Untersuchen der Cluster

Zusammenfassung

Wir kรถnnen den k-Mean-Algorithmus in der folgenden Tabelle zusammenfassen

Verpackung Ziel Funktion Argument
Base Trainieren Sie k-mean kmeans () df, k
Zugriffscluster kmeans()$cluster
Cluster Zentren kmeans()$centers
GrรถรŸencluster kmeans()$size

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: