R Language
Hierarchiczne grupowanie za pomocą hclust
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
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)
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)
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)
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)
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)
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.