Calculez et visualisez la (dis)similarité entre observations — la règle dont dépend toute méthode de clustering
Tout algorithme de clustering part d’une matrice de distance. Apprenez à préparer vos données (numériques, standardisées), à calculer des distances euclidienne, de Manhattan et basées sur la corrélation (Pearson, Spearman, Kendall) avec dist() de base R et get_dist() de factoextra, à gérer les types de données mixtes avec daisy(), et à visualiser le résultat avec fviz_dist() — pour choisir la bonne mesure pour vos données.
Date de publication
24 juin 2026
Modifié
11 juillet 2026
AstucePoints clés
Le clustering regroupe les observations par distance — toute méthode commence par construire une matrice de distance (dissimilarité).
Standardisez vos données d’abord (scale()) : sans cela, les variables exprimées sur de plus grandes échelles numériques dominent la distance.
La distance euclidienne (en ligne droite) est le choix par défaut ; la distance de Manhattan (en pâtés de maisons) est plus robuste aux valeurs aberrantes.
La distance basée sur la corrélation (Pearson/Spearman/Kendall) regroupe par forme de profil, en ignorant l’amplitude — la solution de référence pour l’expression génique et les données de préférence.
Calculez avec dist() de base (euclidienne/Manhattan/…) ou avec get_dist() de factoextra (qui ajoute les méthodes de corrélation) ; utilisez daisy() pour les types de données mixtes ; visualisez la matrice avec fviz_dist().
Pourquoi la distance est le fondement du clustering
Le clustering place les observations similaires dans le même groupe — des patients au profil d’expression génique partagé, des clients aux habitudes d’achat semblables, des États américains aux statistiques de criminalité proches. Mais « similaire » ne va pas de soi : vous devez le définir. Cette définition est une distance (ou dissimilarité) entre chaque paire d’observations, rassemblées dans une matrice de distance. Tout algorithme de clustering — k-means, classification hiérarchique, PAM — lit cette matrice et travaille à partir d’elle.
La mesure de distance est donc un choix critique, souvent négligé. Elle décide quelles observations paraissent proches et lesquelles paraissent éloignées, et elle façonne directement les regroupements que vous obtenez. Choisissez-la délibérément, pas par accident. Cette leçon montre comment préparer vos données, calculer les distances courantes et examiner le résultat avant de regrouper quoi que ce soit.
Préparez vos données d’abord
L’analyse de clustering attend les données sous une forme précise. Avant de calculer une distance :
Les lignes sont des observations, les colonnes des variables (la disposition tidy standard).
Supprimez ou estimez les valeurs manquantes — dist() et ses semblables ont besoin de données numériques complètes.
Standardisez (mettez à l’échelle) les variables pour qu’elles soient comparables.
Nous utilisons le jeu de données intégré USArrests : taux d’arrestations (pour 100 000) pour Murder, Assault et Rape, plus le pourcentage de population vivant en zone urbaine (UrbanPop), pour chacun des 50 États américains en 1973. Chargez-le et supprimez les lignes manquantes :
data("USArrests") # built-in datasetdf <-na.omit(USArrests) # remove any rows with missing valueshead(df, 3)
Regardez les échelles brutes : Assault se chiffre en centaines tandis que Murder reste à un seul chiffre. La distance n’est qu’une opération arithmétique sur ces nombres, si bien qu’une variable mesurée en grandes unités domine silencieusement — les regroupements seraient presque entièrement dictés par Assault. Nous ne voulons pas que le résultat dépende d’un choix d’unités arbitraire ; nous standardisons donc chaque variable à une moyenne de 0 et un écart-type de 1 avec la fonction scale() de base R, qui opère sur les colonnes d’une matrice numérique :
df <-na.omit(USArrests)df.scaled <-scale(df) # standardize: mean 0, sd 1 per columnhead(round(df.scaled, 2), 3)
La standardisation a un second avantage : elle fait que les différentes mesures de distance (euclidienne, Manhattan, corrélation) se comportent plus semblablement que sur des données brutes, si bien que le choix entre elles importe moins une fois les données standardisées.
NoteLa formule de standardisation
Chaque valeur est transformée en \((x_i - c) / s\), où le centre \(c\) est habituellement la moyenne (ou la médiane) et l’échelle \(s\) est habituellement l’écart-type (ou l’IQR / le MAD). scale() utilise par défaut la moyenne et l’écart-type.
Les mesures de distance
Distance euclidienne et distance de Manhattan
Les deux mesures classiques traitent chaque observation comme un point dans l’espace et mesurent à quelle distance se trouvent deux points \(x\) et \(y\) (chacun un vecteur de longueur \(n\)) :
Distance euclidienne — la distance en ligne droite familière. Le choix par défaut de presque tous les outils de clustering. Sensible aux grandes différences car elle les met au carré.
Distance de Manhattan — la distance « en pâtés de maisons » : on somme les différences absolues, coordonnée par coordonnée. Plus robuste aux valeurs aberrantes que l’euclidienne, car elle ne met pas les écarts au carré.
Si vous regroupez avec la distance euclidienne, les observations aux fortes valeurs de variables se rassemblent (et les faibles avec les faibles). C’est le bon choix par défaut lorsque c’est l’amplitude absolue qui doit définir le « similaire ».
Distance basée sur la corrélation
Une distance basée sur la corrélation pose une question différente : deux observations ont-elles le même profil, indépendamment de l’amplitude ? Elle se définit en soustrayant le coefficient de corrélation à 1, si bien que la distance vaut 0 lorsque deux observations sont parfaitement corrélées. Deux observations comptent comme similaires si leurs variables montent et descendent ensemble — même si leurs valeurs réelles sont éloignées au sens euclidien.
Trois variantes, selon la corrélation utilisée :
Pearson — mesure une relation linéaire ; la plus courante, mais sensible aux valeurs aberrantes.
Spearman — corrèle les rangs ; non paramétrique, une alternative robuste quand les valeurs aberrantes vous inquiètent.
Kendall — corrèle la concordance de classement des paires ; non paramétrique elle aussi, basée sur les rangs.
C’est le choix standard en analyse de l’expression génique (regrouper les gènes qui sont « activés » et « désactivés » ensemble) et en marketing (des acheteurs aux mêmes préférences d’articles, peu importe les quantités achetées).
NoteSur des données standardisées, corrélation et distance euclidienne sont liées
Une fois les variables standardisées (moyenne nulle, longueur unitaire), il existe une relation fonctionnelle entre la corrélation de Pearson \(r(x,y)\) et la distance euclidienne : \(d_{euc}(x,y) = \sqrt{2m\,[1 - r(x,y)]}\) pour des vecteurs à \(m\) composantes. Ainsi, sur des données standardisées, une distance de corrélation de Pearson et une distance euclidienne donnent des résultats comparables.
Calculez la matrice de distance
R vous offre plusieurs fonctions pour la distance entre paires d’observations — toutes calculent les distances entre les lignes des données :
get_dist() [factoextra] — données numériques seulement, mais ajoute les méthodes basées sur la corrélation ("pearson", "spearman", "kendall") en plus de celles de dist().
daisy() [cluster] — gère les types de variables mixtes (nominal, ordinal, binaire) via le coefficient de Gower.
Distance euclidienne avec dist()
Pour garder l’affichage lisible, nous prenons un sous-ensemble de 15 États aléatoires, puis nous calculons la distance euclidienne. dist() renvoie un objet de distance compact ; enveloppez-le dans as.matrix() pour le voir comme une matrice carrée :
data("USArrests")set.seed(123)ss <-sample(1:50, 15) # 15 random statesdf <- USArrests[ss, ] # subsetdf.scaled <-scale(df) # standardizedist.eucl <-dist(df.scaled, method ="euclidean")# Reformat as a matrix; show the first 3 rows/cols, roundedround(as.matrix(dist.eucl)[1:3, 1:3], 1)
New Mexico Iowa Indiana
New Mexico 0.0 4.1 2.5
Iowa 4.1 0.0 1.8
Indiana 2.5 1.8 0.0
Chaque cellule est la distance entre deux États. La diagonale vaut 0 — chaque observation est à une distance 0 d’elle-même.
Avertissement
Ici, les colonnes sont des variables. Pour calculer les distances entre variables plutôt qu’entre États, transposez d’abord les données avec t() pour que les variables deviennent des lignes, puis appelez dist().
Distance basée sur la corrélation avec get_dist()
Pour une distance basée sur la corrélation, utilisez get_dist() de factoextra avec method = "pearson" (ou "spearman" / "kendall") :
New Mexico Iowa Indiana
New Mexico 0.0 1.7 2.0
Iowa 1.7 0.0 0.3
Indiana 2.0 0.3 0.0
Remarquez que les nombres diffèrent de la matrice euclidienne : le Nouveau-Mexique et l’Iowa sont plus proches sous la distance de corrélation (1.7) que sous la distance euclidienne (4.1), parce que la relation reflète la façon dont leurs profils de criminalité évoluent de concert plutôt que l’écart brut entre leurs valeurs.
Types de données mixtes avec daisy()
Lorsque vos données comportent des colonnes non numériques (facteurs, facteurs ordonnés), dist() ne fonctionne pas. La fonction daisy() du paquet cluster gère cela automatiquement avec la métrique de Gower. La voici sur le jeu de données intégré flower, qui mélange des variables de type facteur, ordonné et numérique :
Le coefficient de Gower renvoie des dissimilarités dans l’intervalle 0–1 — une échelle propre et comparable entre les types de variables.
Visualisez la matrice de distance
Les nombres sont difficiles à parcourir ; une image, non. fviz_dist() [factoextra] dessine la matrice de distance sous forme de heatmap colorée — la figure emblématique de cette étape :
Le niveau de couleur est proportionnel à la distance : rouge pur quand \(dist(x_i, x_j) = 0\), bleu pur à la plus grande distance.
Les observations appartenant au même regroupement sont placées dans un ordre consécutif, si bien que les blocs rouges le long de la diagonale laissent déjà deviner les groupes avant même de lancer un algorithme.
Valeurs absolues, mais robuste aux valeurs aberrantes
Manhattan
En pâtés de maisons ; ne met pas les écarts au carré
Forme de profil, en ignorant l’amplitude
Corrélation (Pearson)
Expression génique, préférences ; sensible aux valeurs aberrantes
Forme de profil, robuste aux valeurs aberrantes
Corrélation (Spearman/Kendall)
Basée sur les rangs, non paramétrique
Données numériques + catégorielles mixtes
Gower (daisy)
Gère les facteurs et les facteurs ordonnés
En cas de doute, si vos variables sont toutes numériques et sur une échelle comparable, commencez par l’euclidienne. Tournez-vous vers une distance basée sur la corrélation quand « similaire » signifie « même motif », et non « même niveau ».
Essayez en direct
Calculez la matrice de distance de trois façons et comparez. Changez la méthode ("manhattan", "spearman", "kendall") ou le jeu de données et relancez ; le bac à sable démarre au premier Run.
🟢 Avec un agent IA
Demandez à Prova« quelle mesure de distance devrais-je utiliser pour regrouper mon jeu de données, et comment la calculer en R ? » — elle répond avec du code dist()/get_dist() que vous pouvez exécuter sur vos propres données, puis vous aide à lire la heatmap fviz_dist(). The runtime is the judge.Demander à Prova →
Problèmes courants
Vos regroupements sont dictés par une seule variable. Vous avez oublié de standardiser. Une variable sur une plus grande échelle numérique (p. ex. Assault en centaines contre Murder à un seul chiffre) domine la distance. Lancez scale() sur les données avant de calculer les distances.
dist() renvoie une erreur ou des distances toutes en NA. Les données comportent encore des colonnes non numériques ou des valeurs manquantes. Utilisez na.omit() pour supprimer les lignes incomplètes, ne gardez que les colonnes numériques, ou passez à daisy() pour les types de données mixtes.
La distance euclidienne donne des regroupements inattendus pour des données « de profil ». Si ce qui vous importe est la forme du profil de chaque observation, et non son amplitude, l’euclidienne est le mauvais outil — utilisez une distance basée sur la corrélation via get_dist(method = "pearson") (ou "spearman" si les valeurs aberrantes sont une préoccupation).
Questions fréquentes
NoteQuelle est la différence entre la distance euclidienne et la distance de Manhattan ?
La distance euclidienne est la distance en ligne droite entre deux points (la racine carrée de la somme des différences au carré). La distance de Manhattan est la distance en pâtés de maisons (la somme des différences absolues). Parce que Manhattan ne met pas les différences au carré, elle est moins sensible aux valeurs aberrantes et aux grands écarts que l’euclidienne.
NoteQuelle mesure de distance utiliser pour le clustering ?
Utilisez l’euclidienne (le choix par défaut) lorsque vous voulez regrouper les observations par valeurs absolues et que vos variables sont sur une échelle comparable. Utilisez une distance basée sur la corrélation (get_dist(method = "pearson")) lorsque vous voulez regrouper par forme de profil indépendamment de l’amplitude — fréquent pour l’expression génique et les données de préférence. Utilisez Gower (daisy()) pour des données numériques et catégorielles mixtes.
NoteQu’est-ce que la distance basée sur la corrélation et quand l’utiliser ?
La distance basée sur la corrélation est 1 - correlation, donc elle vaut 0 quand deux observations sont parfaitement corrélées. Elle traite les observations comme similaires lorsque leurs variables montent et descendent ensemble, même si les valeurs réelles sont éloignées. Utilisez-la quand le motif compte plus que l’amplitude — par exemple pour regrouper des gènes « activés » et « désactivés » ensemble, ou des acheteurs aux mêmes préférences d’articles indépendamment du volume.
NoteDois-je standardiser mes données avant le clustering ?
Presque toujours, oui — lorsque vos variables sont mesurées sur des échelles différentes. La distance est une opération arithmétique sur les nombres bruts, si bien qu’une variable en grandes unités domine le résultat. Standardisez chaque variable à une moyenne de 0 et un écart-type de 1 avec scale() avant de calculer les distances. L’exception concerne des données déjà sur la même échelle signifiante (p. ex. tous des log-ratios d’expression génique), où la standardisation peut être inutile.
NoteQuelle est la différence entre les distances de corrélation de Pearson, Spearman et Kendall ?
Pearson mesure une relation linéaire et est la plus courante, mais elle est sensible aux valeurs aberrantes. Spearman et Kendall sont basées sur les rangs (non paramétriques) : Spearman corrèle les rangs, Kendall corrèle la concordance des paires classées. Préférez Spearman ou Kendall lorsque des valeurs aberrantes pourraient fausser une corrélation de Pearson.
Testez vos connaissances
ImportantPratique
Exécutez-le. Dans la cellule interactive ci-dessous, standardisez les 10 premières lignes d’USArrests, puis calculez et visualisez la matrice de distance de Manhattan avec fviz_dist(). Quels deux États paraissent les plus similaires ?
Conceptuel. Deux observations ont des formes identiques (l’une est juste une copie agrandie de l’autre) mais des amplitudes très différentes. La distance euclidienne les jugera-t-elle similaires ? Et la distance de corrélation de Pearson ? Pourquoi ?
NoteIndice
Remplissez le blanc avec "manhattan". Sur la heatmap, la paire la plus similaire est la cellule rouge la plus vive hors de la diagonale. Pour la question 2, rappelez-vous que l’euclidienne mesure les écarts absolus tandis que la corrélation mesure si les profils évoluent de concert.
Question 2 : la distance euclidienne les jugera éloignées — elle mesure l’écart absolu entre les valeurs, qui est grand ici. La distance de corrélation de Pearson les jugera similaires (proche de 0) — les profils sont parfaitement corrélés, et la corrélation ignore l’amplitude. C’est exactement pourquoi vous choisissez une distance basée sur la corrélation quand la forme compte plus que le niveau.
Conclusion
Une matrice de distance est le fondement sur lequel toute méthode de clustering se construit. Préparez des données numériques, standardisez-les pour qu’aucune variable ne domine, puis choisissez une mesure qui correspond à ce que « similaire » signifie pour votre problème : euclidienne/Manhattan pour les valeurs absolues, basée sur la corrélation pour la forme de profil, Gower (daisy) pour les données mixtes. Calculez-la avec dist() ou get_dist(), et examinez-la toujours avec fviz_dist() avant de regrouper — les blocs rouges révèlent souvent les groupes à l’avance.
Vous préférez un livre ? Practical Guide to Cluster Analysis 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 Analyse de clustering en R — suivez votre parcours, construisez des projets et obtenez un certificat.
Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.
@online{2026,
author = {},
title = {Mesures de distance pour le clustering en R},
date = {2026-06-24},
url = {https://www.datanovia.com/learn/machine-learning/clustering/distance-measures},
langid = {fr}
}