R Language
Hierarchisches Clustering mit hclust
Suche…
Einführung
Das Paket stats
bietet die Funktion hclust
, um hierarchisches Clustering durchzuführen.
Bemerkungen
Neben hclust stehen auch andere Methoden zur Verfügung, siehe CRAN- Paketansicht zum Clustering .
Beispiel 1 - Grundlegende Verwendung von hclust, Anzeige des Dendrogramms, Plotcluster
Die Clusterbibliothek enthält die Ruspini-Daten - einen Standarddatensatz zur Veranschaulichung der Clusteranalyse.
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclust erwartet eine Entfernungsmatrix, nicht die Originaldaten. Wir berechnen den Baum anhand der Standardparameter und zeigen ihn an. Mit dem Hang-Parameter werden alle Blätter des Baums entlang der Grundlinie ausgerichtet.
ruspini_hc_defaults <- hclust(dist(ruspini))
dend <- as.dendrogram(ruspini_hc_defaults)
if(!require(dendextend)) install.packages("dendextend"); library(dendextend)
dend <- color_branches(dend, k = 4)
plot(dend)
Schneiden Sie die Baumstruktur aus, um vier Cluster zu erhalten, und ordnen Sie die Daten neu zu, indem Sie die Punkte nach Cluster färben. k ist die gewünschte Anzahl von Clustern.
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
Dieses Clustering ist etwas seltsam. Wir können ein besseres Clustering erzielen, indem wir zuerst die Daten skalieren.
scaled_ruspini_hc_defaults = hclust(dist(scale(ruspini)))
srhc_def_4 = cutree(scaled_ruspini_hc_defaults,4)
plot(ruspini, pch=20, asp=1, col=srhc_def_4)
Das Standard-Unähnlichkeitsmaß für den Vergleich von Clustern ist "complete". Sie können mit dem Methodenparameter eine andere Kennzahl angeben.
ruspini_hc_single = hclust(dist(ruspini), method="single")
Beispiel 2 - hclust und Ausreißer
Beim hierarchischen Clustering werden Ausreißer häufig als Einpunkt-Cluster angezeigt.
Generieren Sie drei Gaußsche Verteilungen, um die Auswirkungen von Ausreißern zu veranschaulichen.
set.seed(656)
x = c(rnorm(150, 0, 1), rnorm(150,9,1), rnorm(150,4.5,1))
y = c(rnorm(150, 0, 1), rnorm(150,0,1), rnorm(150,5,1))
XYdf = data.frame(x,y)
plot(XYdf, pch=20)
Erstellen Sie die Clusterstruktur, und teilen Sie sie in drei Cluster auf.
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
hclust hat zwei Ausreißer gefunden und alles andere in einem großen Cluster zusammengefasst. Um die "echten" Cluster zu erhalten, müssen Sie möglicherweise k höher setzen.
XYs6 = cutree(XY_sing,k=6)
table(XYs6)
XYs6
1 2 3 4 5 6
148 150 1 149 1 1
plot(XYdf, pch=20, col=XYs6)
Dieser StackOverflow-Beitrag enthält einige Anweisungen zum Auswählen der Anzahl von Clustern. Beachten Sie jedoch dieses Verhalten beim hierarchischen Clustering.