R Language
Cluster hiérarchique avec hclust
Recherche…
Introduction
Le package stats
fournit la fonction hclust
pour effectuer un clustering hiérarchique.
Remarques
Outre hclust, d'autres méthodes sont disponibles, voir la vue du package CRAN sur le clustering .
Exemple 1 - Utilisation de base de hclust, affichage du dendrogramme, grappes de parcelles
La bibliothèque de grappes contient les données ruspini - un ensemble standard de données pour illustrer l'analyse de grappe.
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclust attend une matrice de distance, pas les données d'origine. Nous calculons l’arbre en utilisant les paramètres par défaut et l’affiche. Le paramètre de blocage aligne toutes les feuilles de l'arbre le long de la ligne de base.
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)
Coupez l'arbre pour donner quatre grappes et répliquez les données en colorant les points par grappe. k est le nombre de grappes souhaité.
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
Ce regroupement est un peu étrange. Nous pouvons obtenir un meilleur regroupement en dimensionnant d'abord les données.
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)
La mesure de dissimilarité par défaut pour comparer les grappes est "complète". Vous pouvez spécifier une mesure différente avec le paramètre de méthode.
ruspini_hc_single = hclust(dist(ruspini), method="single")
Exemple 2 - hclust et valeurs aberrantes
Avec la classification hiérarchique, les valeurs aberrantes apparaissent souvent sous forme de clusters à un point.
Générez trois distributions gaussiennes pour illustrer l'effet des valeurs aberrantes.
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)
Construisez la structure du cluster, divisez-la en trois groupes.
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
Hclust a trouvé deux valeurs aberrantes et a mis tout le reste dans un grand cluster. Pour obtenir les "vrais" clusters, vous devrez peut-être définir k plus haut.
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)
Cette publication de StackOverflow fournit des conseils sur la manière de sélectionner le nombre de clusters, mais prenez en compte ce comportement dans la classification hiérarchique.