HCPC : classification hiérarchique sur composantes principales en R

Débruitez avec une méthode de composantes principales, puis regroupez les individus sur les composantes — classification hiérarchique et consolidation k-means

Un guide pratique de HCPC (classification hiérarchique sur composantes principales) en R avec FactoMineR et factoextra : calculez d’abord une ACP pour réduire et débruiter les données, lancez HCPC() sur le résultat, lisez le dendrogramme et la carte factorielle des regroupements, laissez HCPC suggérer le nombre de regroupements, et décrivez chaque regroupement par ses variables, ses axes et ses individus représentatifs. Appliqué aux données USArrests.

Date de publication

24 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • La HCPC (Classification Hiérarchique sur Composantes Principales) regroupe les individus à partir de la sortie d’une méthode de composantes principales — lancez d’abord PCA() (ou CA/MCA/MFA), puis regroupez sur les composantes, et non sur les variables brutes.
  • Pourquoi réduire d’abord, puis regrouper : l’étape d’ACP débruite les données et transforme de nombreuses variables corrélées en quelques dimensions stables, ce qui rend le regroupement plus robuste.
  • La HCPC combine trois méthodes en un seul appel : une méthode de composantes principales → une classification hiérarchique (critère de Ward) → une consolidation k-means de la partition.
  • Calculez-la avec HCPC() de FactoMineR ; visualisez avec factoextrafviz_dend() pour l’arbre, fviz_cluster() pour la carte factorielle.
  • La HCPC suggère automatiquement le nombre de regroupements à partir de l’arbre (posez nb.clust = -1), ou vous le fixez vous-même.
  • Lisez les regroupements avec res.hcpc$desc.var (quelles variables définissent chaque regroupement), $desc.axes (quelles dimensions) et $desc.ind (les individus les plus représentatifs).
Obtenez le livre — Principal Component Methods in R (PDF)

Introduction

Le regroupement (clustering) identifie des groupes d’observations similaires dans un jeu de données multivarié. Deux stratégies dominent : la classification hiérarchique (qui construit un arbre de groupes emboîtés) et les méthodes de partitionnement comme k-means (qui scindent les données en un nombre fixe de groupes).

La HCPC — classification hiérarchique sur composantes principales — associe le regroupement à une méthode de composantes principales (PCA, CA, MCA, FAMD ou MFA). L’idée est simple : au lieu de regrouper les variables brutes, vous lancez d’abord une méthode de composantes principales pour compresser les données en quelques composantes principales, puis vous regroupez les individus sur ces composantes. L’étape des composantes agit comme une étape de débruitage — elle élimine la redondance et le bruit et ne laisse qu’un petit ensemble stable de dimensions — ce qui donne en général un regroupement plus stable. Cela compte surtout sur les grands jeux de données larges comme les tableaux d’expression génique, où regrouper les colonnes brutes est à la fois bruité et lent.

Utilisez la HCPC quand :

  • Vous avez de nombreuses variables continues → lancez d’abord une ACP, puis regroupez (cette leçon).
  • Vous avez des variables catégorielles → lancez d’abord une CA / MCA pour les transformer en composantes continues, puis regroupez.
  • Vous avez des données mixtes continues + catégorielles → lancez d’abord une FAMD / MFA, puis regroupez.

Cette leçon fait le pont entre la série Réduction de dimension et la série Analyse de regroupement : elle suppose que vous savez déjà lancer une ACP et que vous avez rencontré la classification hiérarchique et k-means. Nous utilisons FactoMineR pour l’analyse et factoextra pour la visualisation.

Comment fonctionne la HCPC

Telle qu’implémentée dans HCPC() (FactoMineR), l’algorithme déroule quatre étapes :

  1. Calculer une méthode de composantes principales — PCA, (M)CA ou MFA, selon les types de variables. Vous choisissez combien de dimensions conserver avec ncp (5 par défaut). C’est l’étape de réduction et de débruitage.
  2. Classification hiérarchique — regroupement agglomératif utilisant le critère de Ward sur les composantes retenues. Ward est le complément naturel car, comme l’ACP, il travaille sur la variance multidimensionnelle.
  3. Choisir le nombre de regroupements à partir de l’arbre — une partition initiale est obtenue en coupant le dendrogramme là où le gain d’inertie intra-regroupement décroche.
  4. Consolidation k-means — k-means affine ensuite cette partition initiale. La solution finale peut différer légèrement de la coupe brute de l’arbre, car quelques individus peuvent être réaffectés à un centre plus proche.

Le point pratique essentiel : la HCPC vous suggère un nombre de regroupements (étape 3), puis améliore la partition (étape 4) — vous n’avez pas à choisir k à l’aveugle comme avec un k-means nu.

Packages R

Nous utilisons deux packages : FactoMineR pour calculer la HCPC, et factoextra pour une visualisation fondée sur ggplot2. Installez-les une fois :

install.packages(c("FactoMineR", "factoextra"))

Puis chargez-les :

library(FactoMineR)
library(factoextra)

La fonction HCPC() a la forme simplifiée HCPC(res, nb.clust = 0, min = 3, max = NULL, graph = TRUE) :

  • res — le résultat d’une méthode de composantes principales (un objet PCA/MCA/MFA) ou un data frame brut (la HCPC lance alors une ACP elle-même).
  • nb.clust — le nombre de regroupements : 0 = couper là où vous cliquez (interactif), -1 = couper automatiquement au niveau suggéré, ou tout entier positif pour forcer k.
  • min, max — bornes sur le nombre de regroupements que la règle automatique peut choisir.
  • graph — si TRUE, les graphiques sont tracés immédiatement ; nous posons FALSE et les traçons avec factoextra.

Les données

Nous regrouperons les données intégrées USArrests — taux d’arrestations pour 100 000 habitants pour Murder, Assault et Rape, plus le pourcentage UrbanPop vivant en zone urbaine, à travers les 50 États américains. Quatre variables continues, donc la bonne méthode de composantes principales est l’ACP.

Calculez d’abord l’ACP, en conservant les trois premières composantes avec ncp = 3 — c’est l’étape de réduction et de débruitage. Puis lancez HCPC() sur le résultat de l’ACP :

library(FactoMineR)

# Step 1 — PCA, keeping the first 3 principal components
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)

# Step 2-4 — hierarchical clustering + k-means consolidation on those components
res.hcpc <- HCPC(res.pca, graph = FALSE)

res.pca réduit les quatre variables standardisées à trois composantes ; HCPC() regroupe ensuite les États sur ces composantes et consolide la partition avec k-means.

Le dendrogramme

Visualisez l’arbre hiérarchique avec fviz_dend() (factoextra). Les rectangles colorés marquent les regroupements que la HCPC a sélectionnés :

library(FactoMineR)
library(factoextra)
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
res.hcpc <- HCPC(res.pca, graph = FALSE)

fviz_dend(res.hcpc,
          cex = 0.7,                      # label size
          palette = "jco",                # colourblind-safe journal palette
          rect = TRUE, rect_fill = TRUE,  # draw a box around each cluster
          rect_border = "jco",            # box colour
          labels_track_height = 0.8       # room for the state labels
          )

HCPC dendrogram of the 50 US states built on three principal components, with coloured rectangles enclosing the four suggested clusters and state names along the bottom.

NoteLa HCPC a suggéré 4 regroupements

La HCPC a coupé l’arbre là où le gain d’inertie d’une scission supplémentaire décroche — ici cela donne une solution à 4 regroupements. Vous n’avez pas eu à choisir k : la règle automatique (le comportement par défaut nb.clust = -1) l’a choisi. Pour le remplacer, passez un entier positif, par exemple HCPC(res.pca, nb.clust = 3, graph = FALSE).

La carte factorielle des regroupements

Projetez maintenant les individus sur les deux premières composantes principales et colorez-les par regroupement, avec fviz_cluster(). C’est la carte factorielle — elle montre les regroupements se situent dans l’espace de l’ACP :

library(FactoMineR)
library(factoextra)
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
res.hcpc <- HCPC(res.pca, graph = FALSE)

fviz_cluster(res.hcpc,
             repel = TRUE,             # avoid label overlap
             show.clust.cent = TRUE,   # mark each cluster centre
             palette = "jco",
             ggtheme = theme_minimal(),
             main = "Factor map"
             )

HCPC factor map of the US states on the first two principal components, the states coloured into four clusters with labelled points and cluster centre markers.

Les États proches les uns des autres sont similaires ; les regroupements se séparent surtout selon la première dimension (niveau global de criminalité) et la seconde (population urbaine). Vous pouvez aussi combiner l’arbre et la carte en une seule vue 3D avec le plot() de base R :

library(FactoMineR)
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
res.hcpc <- HCPC(res.pca, graph = FALSE)

# Principal-component map with the dendrogram rising above it
plot(res.hcpc, choice = "3D.map")

Three-dimensional HCPC plot combining the factor map of the US states on the first two principal components with the hierarchical tree rising above it, the states coloured by cluster.

Décrire les regroupements

HCPC() renvoie une liste riche. Les éléments que vous utiliserez :

  • data.clust — les données d’origine avec une colonne clust supplémentaire = la partition.
  • desc.var — les variables qui décrivent chaque regroupement.
  • desc.axes — les axes principaux qui décrivent chaque regroupement.
  • desc.ind — les individus les plus représentatifs (les plus typiques) de chaque regroupement.

Les données avec les étiquettes de regroupement

Les données regroupées portent une colonne finale clust avec le regroupement de chaque État :

library(FactoMineR)
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
res.hcpc <- HCPC(res.pca, graph = FALSE)

head(res.hcpc$data.clust, 10)
            Murder Assault UrbanPop Rape clust
Alabama       13.2     236       58 21.2     3
Alaska        10.0     263       48 44.5     4
Arizona        8.1     294       80 31.0     4
Arkansas       8.8     190       50 19.5     3
California     9.0     276       91 40.6     4
Colorado       7.9     204       78 38.7     4
Connecticut    3.3     110       77 11.1     2
Delaware       5.9     238       72 15.8     2
Florida       15.4     335       80 31.9     4
Georgia       17.4     211       60 25.8     3

Description par variables

desc.var$quanti classe, pour chaque regroupement, les variables qui le distinguent le plus — en comparant la moyenne dans le regroupement à la moyenne générale, avec une p-value. Nous n’affichons que ces trois colonnes :

library(FactoMineR)
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
res.hcpc <- HCPC(res.pca, graph = FALSE)

# Keep "Mean in category", "Overall mean", "p.value" for each cluster
lapply(res.hcpc$desc.var$quanti,
       function(x) x[, c(2, 3, 6), drop = FALSE])
$`1`
         Mean in category Overall mean      p.value
UrbanPop         52.07692       65.540 9.682222e-05
Murder            3.60000        7.788 5.573624e-05
Rape             12.17692       21.232 5.076842e-05
Assault          78.53846      170.760 3.515038e-06

$`2`
         Mean in category Overall mean     p.value
UrbanPop         73.87500       65.540 0.005219187
Murder            5.65625        7.788 0.017590794

$`3`
         Mean in category Overall mean      p.value
Murder            13.9375        7.788 1.317449e-05
Assault          243.6250      170.760 6.970399e-03
UrbanPop          53.7500       65.540 1.194833e-02

$`4`
         Mean in category Overall mean      p.value
Rape             33.19231       21.232 8.692769e-08
Assault         257.38462      170.760 1.320491e-05
UrbanPop         76.00000       65.540 2.454964e-03
Murder           10.81538        7.788 3.576369e-03

Lisez-le regroupement par regroupement :

  • Le regroupement 1 est défini par UrbanPop, Murder, Rape et Assault. Sa moyenne Assault est de 78.5, bien en dessous de la moyenne générale de 170.8 — donc le regroupement 1 est le groupe d’États à faible criminalité.
  • Le regroupement 2 est surtout associé à UrbanPop et Murder.
  • Les regroupements restants suivent la même logique — comparez la moyenne dans la catégorie à la moyenne générale pour nommer chaque groupe.

Le signe de l’écart raconte toute l’histoire : une moyenne supérieure à la moyenne générale signifie que le regroupement est élevé sur cette variable ; inférieure signifie faible.

Description par axes

desc.axes vous indique quelles dimensions principales séparent les regroupements — pratique car les dimensions ont déjà une signification ACP :

library(FactoMineR)
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
res.hcpc <- HCPC(res.pca, graph = FALSE)

lapply(res.hcpc$desc.axes$quanti,
       function(x) x[, c(2, 3, 6), drop = FALSE])
$`1`
      Mean in category Overall mean      p.value
Dim.1        -1.964502 1.563194e-15 2.269806e-07

$`2`
      Mean in category  Overall mean      p.value
Dim.2        0.7428712 -2.081668e-17 0.0003362596

$`3`
      Mean in category  Overall mean      p.value
Dim.1        1.0610731  1.563194e-15 3.955769e-02
Dim.3        0.3965588  1.199041e-16 4.246985e-02
Dim.2       -1.4773302 -2.081668e-17 5.717010e-06

$`4`
      Mean in category Overall mean      p.value
Dim.1         1.892656 1.563194e-15 6.149115e-07

Les individus des regroupements 1 et 4 ont des coordonnées élevées sur l’axe 1 ; ceux du regroupement 2 se situent haut sur l’axe 2 ; le regroupement 3 se répartit sur les axes 1, 2 et 3. Cela correspond à la carte factorielle ci-dessus.

Description par individus

desc.ind$para liste, pour chaque regroupement, les individus les plus proches du centre du regroupement — les membres les plus typiques — et leur distance à ce centre :

library(FactoMineR)
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
res.hcpc <- HCPC(res.pca, graph = FALSE)

res.hcpc$desc.ind$para
Cluster: 1
        Idaho  South Dakota         Maine          Iowa New Hampshire 
    0.3674381     0.4993032     0.5012072     0.5533105     0.5891145 
------------------------------------------------------------ 
Cluster: 2
        Ohio     Oklahoma Pennsylvania       Kansas      Indiana 
   0.2796100    0.5047549    0.5088363    0.6039091    0.7100820 
------------------------------------------------------------ 
Cluster: 3
       Alabama South Carolina        Georgia      Tennessee      Louisiana 
     0.3553460      0.5335189      0.6136865      0.8522640      0.8780872 
------------------------------------------------------------ 
Cluster: 4
  Michigan    Arizona New Mexico   Maryland      Texas 
 0.3246254  0.4532480  0.5176322  0.9013514  0.9239792 

Les cinq individus les plus proches de chaque centre sont les « représentants » du regroupement. Pour le regroupement 1 ce sont Idaho, South Dakota, Maine, Iowa et New Hampshire — les États à faible criminalité prototypiques.

NoteDonnées catégorielles ou mixtes ? Changez la première étape

Avec des variables catégorielles, lancez MCA() au lieu de PCA() et passez le résultat à HCPC() — les regroupements sont alors décrits par desc.var$test.chi2 (variables) et desc.var$category (catégories) plutôt que quanti. Avec des données mixtes continues + catégorielles, lancez d’abord FAMD(). La moitié regroupement (HCPC(), le dendrogramme, la carte factorielle, desc.*) est identique — seule la méthode de composantes principales change. Voir analyse des correspondances et analyse des correspondances multiples.

Essayez en direct

Lancez le workflow HCPC complet dans votre navigateur — aucune installation nécessaire. Essayez de forcer un nombre différent de regroupements avec nb.clust = 3, ou de relancer l’ACP avec ncp = 2, et observez le dendrogramme et la carte factorielle se mettre à jour.

🟢 Avec un agent IA

Vous avez vos propres données multivariées ? Demandez à Prova « lance une HCPC sur mes données — réduis d’abord avec une ACP, puis regroupe les lignes et dis-moi ce qui définit chaque regroupement. » — elle répond avec du code R que vous pouvez exécuter sur vos propres données, puis vous aide à lire le dendrogramme, la carte factorielle et les descriptions de regroupements desc.var. The runtime is the judge. Demandez à Prova →

Problèmes courants

  • Combien de composantes dois-je conserver avant de regrouper ? Conservez-en assez pour retenir l’essentiel de l’information mais assez peu pour débruiter — pour l’ACP, suivez les règles habituelles (valeur propre > 1, ou ~70–80 % de variance cumulée). Ici ncp = 3 conserve trois des quatre dimensions. Pour des données catégorielles avec MCA, on conserve souvent bien plus d’axes (l’exemple tea en conserve 20 pour retenir ~87 %). Trop peu perd du signal ; trop nombreux ruine l’objectif de débruitage.
  • HCPC vs classification hiérarchique simple — quelle différence ? La classification hiérarchique simple s’exécute sur les variables brutes (standardisées) ; la HCPC l’exécute sur les composantes principales puis ajoute une passe de consolidation k-means. L’étape des composantes débruite et stabilise le résultat, et la consolidation peut réaffecter quelques individus limites — la partition HCPC finale peut donc différer légèrement d’une coupe d’arbre nue sur les mêmes données.
  • Lire desc.var de travers. desc.var$quanti n’est pas une corrélation. Comparez la moyenne dans la catégorie à la moyenne générale : au-dessus de la moyenne = le regroupement est élevé sur cette variable, en dessous de la moyenne = faible. La p-value indique seulement que l’écart est significatif. Une petite moyenne de regroupement seule ne signifie rien sans la moyenne générale pour la comparer.
  • HCPC() a ouvert un graphique interactif / m’a demandé de cliquer. Les valeurs par défaut graph = TRUE (et nb.clust = 0) tracent des graphiques et attendent un clic pour couper l’arbre. Dans un script ou un document, posez graph = FALSE et laissez la règle automatique choisir k, ou passez un nb.clust explicite.

Questions fréquentes

La HCPC est une approche de regroupement qui lance d’abord une méthode de composantes principales (PCA pour les données continues, CA/MCA pour les catégorielles, FAMD/MFA pour les mixtes), puis effectue une classification hiérarchique sur les composantes obtenues, et enfin consolide la partition avec k-means. Réduire d’abord débruite les données et donne en général un regroupement plus stable. Elle est implémentée dans la fonction HCPC() du package FactoMineR.

Calculez la méthode de composantes principales, puis passez son résultat à HCPC(). Pour des données continues : res.pca <- PCA(USArrests, ncp = 3, graph = FALSE) puis res.hcpc <- HCPC(res.pca, graph = FALSE). Visualisez avec fviz_dend(res.hcpc) pour le dendrogramme et fviz_cluster(res.hcpc) pour la carte factorielle, et lisez les regroupements avec res.hcpc$desc.var.

La HCPC construit un arbre hiérarchique (critère de Ward) sur les composantes et le coupe là où le gain d’inertie intra-regroupement d’une scission supplémentaire décroche — ce niveau suggéré est utilisé automatiquement (nb.clust = -1). Pour les données USArrests, elle suggère 4 regroupements. Vous pouvez le remplacer en passant un entier positif à nb.clust, ou borner la recherche avec min et max.

Le k-means simple regroupe les variables brutes et exige que vous fixiez k à l’avance. La HCPC réduit les données avec une méthode de composantes principales d’abord (débruitage), laisse l’arbre hiérarchique suggérer k, puis lance une consolidation k-means pour affiner la partition. La HCPC est donc le k-means plus une étape de réduction de dimension et de sélection du nombre de regroupements — préférable pour des données larges, corrélées ou bruitées, et quand vous ne connaissez pas k d’avance.

Oui — seule la première étape change. Pour des variables catégorielles, lancez MCA() et passez-la à HCPC() ; les regroupements sont alors décrits par desc.var$test.chi2 et desc.var$category. Pour des données mixtes continues et catégorielles, lancez d’abord FAMD(). Les étapes de classification hiérarchique et de visualisation sont identiques au cas continu (ACP).

Testez vos connaissances

Lancez une HCPC sur les quatre mesures numériques du jeu de données intégré iris (retirez la colonne Species). Calculez l’ACP en conservant 3 composantes, lancez HCPC(), tracez le dendrogramme et la carte factorielle, et observez combien de regroupements la HCPC suggère.

Retirez la colonne facteur avec iris[, -5], passez-la à PCA(..., ncp = 3, graph = FALSE), puis HCPC(..., graph = FALSE), et utilisez fviz_dend() et fviz_cluster().

library(FactoMineR)
library(factoextra)

# Reduce: PCA on the numeric measurements
iris.pca <- PCA(iris[, -5], ncp = 3, graph = FALSE)

# Cluster on the components
iris.hcpc <- HCPC(iris.pca, graph = FALSE)

# The tree and the factor map
fviz_dend(iris.hcpc, cex = 0.6, palette = "jco",
          rect = TRUE, rect_fill = TRUE, rect_border = "jco")
fviz_cluster(iris.hcpc, repel = TRUE, palette = "jco",
             ggtheme = theme_minimal())

La HCPC suggère un petit nombre de regroupements qui correspondent étroitement aux trois espèces d’iris — setosa se sépare nettement tandis que versicolor et virginica sont plus proches l’une de l’autre.

Vérification rapide. Pourquoi la HCPC lance-t-elle une ACP (ou MCA/MFA) avant la classification hiérarchique, au lieu de regrouper directement les variables brutes ?

L’étape des composantes principales débruite les données et compresse de nombreuses variables corrélées en quelques composantes non corrélées. Regrouper sur ces composantes est plus stable et plus rapide que regrouper les variables brutes, redondantes et bruitées — ce qui est particulièrement précieux sur les grands jeux de données larges comme l’expression génique.

Conclusion

Vous avez combiné réduction de dimension et regroupement en un seul workflow : une PCA() pour réduire et débruiter, puis HCPC() pour construire un arbre hiérarchique sur les composantes, la laisser suggérer 4 regroupements, et consolider avec k-means. Vous avez lu le résultat à travers le dendrogramme (fviz_dend()), la carte factorielle des regroupements (fviz_cluster()) et les descriptions de regroupements — par variables (desc.var), par axes (desc.axes) et par individus représentatifs (desc.ind). Pour des données catégorielles ou mixtes, remplacez la première étape par MCA() ou FAMD() ; tout le reste reste identique.

Leçons connexes

Vous préférez un livre ? Principal Component Methods in R est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.

Obtenir le livre (PDF) →Les leçons restent gratuites en ligne.
Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Réduction de dimension en R — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

Cette leçon est reproductible : chaque figure a été produite par le code montré — modifiez n’importe quel bloc et lancez-le (Run), et le bac à sable + l’exercice se réexécutent en direct dans votre navigateur. The runtime is the judge.

Références

  • Husson, F., Josse, J., & Pagès, J. (2010). Principal component methods - hierarchical clustering - partitional clustering: why would we need to choose for visualizing data? Rapport technique, Agrocampus.
  • Husson, F., Lê, S., & Pagès, J. (2017). Exploratory Multivariate Analysis by Example Using R, 2e éd. CRC Press.
  • Kassambara, A. (2017). Practical Guide to Cluster Analysis in R. STHDA.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {HCPC : classification hiérarchique sur composantes
    principales en R},
  date = {2026-06-24},
  url = {https://www.datanovia.com/learn/machine-learning/dimension-reduction/hcpc},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“HCPC : classification hiérarchique sur composantes principales en R.” 2026. June 24. https://www.datanovia.com/learn/machine-learning/dimension-reduction/hcpc.