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

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

ange bildbeskrivning här

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)

Ruspini-data - första klustering

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)

Skalad Ruspini-data - klusterad

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)

Testdata

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)

Testdata grupperade - 3 utdelare och 3 stora kluster

Detta StackOverflow-inlägg har lite vägledning om hur man väljer antalet kluster, men var medveten om detta beteende i hierarkisk gruppering.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow