R Language
Hierarkisk gruppering med hclust
Sök…
Introduktion
stats
tillhandahåller hclust
funktionen för att utföra hierarkisk klustering.
Anmärkningar
Förutom hclust finns andra metoder tillgängliga, se CRAN-paketvisning om klustering .
Exempel 1 - Grundläggande användning av hclust, visning av dendrogram, plotkluster
Klusterbiblioteket innehåller ruspini-data - en standarduppsättning data för att illustrera klusteranalys.
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclust förväntar sig en distansmatris, inte originaldata. Vi beräknar trädet med standardparametrarna och visar det. Hängparametern rader upp alla bladens träd längs baslinjen.
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)
Skär trädet för att ge fyra kluster och fyll om datan som färgar punkterna efter kluster. k är det önskade antalet kluster.
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
Denna gruppering är lite udda. Vi kan få en bättre gruppering genom att först skala skalan.
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)
Standardmätningen för att jämföra kluster är "fullständig". Du kan ange ett annat mått med metodparametern.
ruspini_hc_single = hclust(dist(ruspini), method="single")
Exempel 2 - hclust och outliers
Med hierarkisk gruppering visas outliers ofta som enpunktskluster.
Generera tre Gauss-fördelningar för att illustrera effekten av utdelare.
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)
Bygg klusterstrukturen, dela den i tre kluster.
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
hclust hittade två outliers och satte allt annat i ett stort kluster. För att få "riktiga" kluster kan du behöva ställa in k högre.
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)
Detta StackOverflow-inlägg har lite vägledning om hur man väljer antalet kluster, men var medveten om detta beteende i hierarkisk gruppering.