R Language
Hiërarchische clustering met hclust
Zoeken…
Invoering
Het stats
biedt de hclust
functie om hiërarchische clustering uit te voeren.
Opmerkingen
Naast hclust zijn er nog andere methoden beschikbaar, zie de CRAN Package View over Clustering .
Voorbeeld 1 - Basisgebruik van hclust, weergave van dendrogram, plotclusters
De clusterbibliotheek bevat de ruspini-gegevens - een standaardset gegevens ter illustratie van clusteranalyse.
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclust verwacht een afstandsmatrix, niet de originele gegevens. We berekenen de boom met behulp van de standaardparameters en geven deze weer. De hang-parameter lijnt alle bladeren van de boom langs de basislijn uit.
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)
Snijd de boom om vier clusters te geven en vul de gegevens opnieuw in waarbij de punten per cluster worden ingekleurd. k is het gewenste aantal clusters.
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
Deze clustering is een beetje vreemd. We kunnen een betere clustering krijgen door eerst de gegevens te schalen.
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)
De standaardmaat voor het vergelijken van clusters is "voltooid". U kunt een andere meetwaarde opgeven met de methode parameter.
ruspini_hc_single = hclust(dist(ruspini), method="single")
Voorbeeld 2 - hclust en uitbijters
Bij hiërarchische clustering verschijnen uitbijters vaak als éénpuntsclusters.
Genereer drie Gaussiaanse distributies om het effect van uitbijters te illustreren.
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)
Bouw de clusterstructuur en deel deze in drie clusters.
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
hclust vond twee uitbijters en plaatste al het andere in één groot cluster. Om de "echte" clusters te krijgen, moet u mogelijk k hoger instellen.
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)
Deze StackOverflow-post bevat enige richtlijnen voor het kiezen van het aantal clusters, maar let op dit gedrag bij hiërarchische clustering.