Szukaj…


Wprowadzenie

Pakiet stats udostępnia funkcję hclust do wykonywania hierarchicznego grupowania.

Uwagi

Oprócz hclust dostępne są inne metody, zobacz Widok pakietu CRAN dotyczący klastrowania .

Przykład 1 - Podstawowe zastosowanie hclust, wyświetlanie dendrogramu, klastry wykresów

Biblioteka klastrów zawiera dane ruspini - standardowy zestaw danych do zilustrowania analizy skupień.

    library(cluster)                ## to get the ruspini data
    plot(ruspini, asp=1, pch=20)    ## take a look at the data

Dane Ruspini

hclust oczekuje macierzy odległości, a nie oryginalnych danych. Obliczamy drzewo przy użyciu domyślnych parametrów i wyświetlamy je. Parametr zawieszenia wyrównuje wszystkie liście drzewa wzdłuż linii bazowej.

    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)

wprowadź opis zdjęcia tutaj

Wytnij drzewo, aby uzyskać cztery klastry, i ponownie umieść dane kolorując punkty według klastra. k jest pożądaną liczbą klastrów.

    rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
    plot(ruspini, pch=20, asp=1, col=rhc_def_4)

Dane Ruspini - pierwsze grupowanie

To grupowanie jest trochę dziwne. Możemy uzyskać lepsze grupowanie, najpierw skalując dane.

    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)

Skalowane dane Ruspini - grupowane

Domyślną miarą niepodobności do porównywania klastrów jest „pełna”. Możesz określić inną miarę za pomocą parametru metody.

    ruspini_hc_single = hclust(dist(ruspini), method="single")

Przykład 2 - hclust i wartości odstające

W przypadku hierarchicznego grupowania wartości odstające często pojawiają się jako klastry jednopunktowe.

Wygeneruj trzy rozkłady Gaussa, aby zilustrować efekt wartości odstających.

    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)

Dane testowe

Zbuduj strukturę klastra, podziel ją na trzy grupy.

    XY_sing = hclust(dist(XYdf), method="single")
    XYs3 = cutree(XY_sing,k=3)
    table(XYs3)
    XYs3
      1   2   3 
    448   1   1 

hclust znalazł dwie wartości odstające i umieścił wszystko inne w jednym dużym klastrze. Aby uzyskać „prawdziwe” klastry, może być konieczne ustawienie k wyżej.

    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)

Dane testowe zgrupowane - 3 wartości odstające i 3 duże klastry

W tym poście StackOverflow znajduje się kilka wskazówek, jak wybrać liczbę klastrów, ale należy pamiętać o tym zachowaniu w klastrowaniu hierarchicznym.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow