install.packages(c("FactoMineR", "factoextra"))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.
- 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 factoextra —fviz_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).
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.
Packages R
Nous utilisons deux packages : FactoMineR pour calculer la HCPC, et factoextra pour une visualisation fondée sur ggplot2. Installez-les une fois :
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 objetPCA/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— siTRUE, les graphiques sont tracés immédiatement ; nous posonsFALSEet 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
)
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 où 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"
)
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")
Décrire les regroupements
HCPC() renvoie une liste riche. Les éléments que vous utiliserez :
data.clust— les données d’origine avec une colonneclustsupplé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,RapeetAssault. Sa moyenneAssaultest 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é à
UrbanPopetMurder. - 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$paraCluster: 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.
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.
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 = 3conserve trois des quatre dimensions. Pour des données catégorielles avec MCA, on conserve souvent bien plus d’axes (l’exempleteaen 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.varde travers.desc.var$quantin’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éfautgraph = TRUE(etnb.clust = 0) tracent des graphiques et attendent un clic pour couper l’arbre. Dans un script ou un document, posezgraph = FALSEet laissez la règle automatique choisir k, ou passez unnb.clustexplicite.
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
- Analyse en composantes principales (ACP) — l’étape de réduction et de débruitage que la HCPC lance d’abord. · Classification hiérarchique — la méthode de construction d’arbre que la HCPC applique aux composantes. · Regroupement k-means — l’étape de consolidation qui affine la partition. · Analyse des correspondances / analyse des correspondances multiples — la première étape pour les données catégorielles.
- Aller plus loin : ACP · analyse des correspondances · analyse des correspondances multiples · Réduction de dimension — la série complète. · Analyse de regroupement — la série non supervisée sœur. · Machine Learning — le pilier.
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.
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.
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
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
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
@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}
}
Comment fonctionne la HCPC
Telle qu’implémentée dans
HCPC()(FactoMineR), l’algorithme déroule quatre étapes :ncp(5 par défaut). C’est l’étape de réduction et de débruitage.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.