Clustering

Hierarchical clustering et Kmeans

Anne Badel, Frédéric Guyon & Jacques van Helden

2020-06-02

Questions abordées dans ce cours

  1. Comment sont représentées les données dans l’ordinateur ?
  2. Comment représenter les données dans l’espace ?
  3. Comment découvrir des “clusters” dans les données ?

    • classification hiérarchique
    • kmeans
  4. Comment déterminer le nombre de groupe optimal ?
  5. Comment comparer deux classifications ?

Les données dans l’ordinateur (1)

Les iris de Fisher

Ces données sont un classique des méthodes d’apprentissage Fisher

Les données dans l’ordinateur (2)

  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
6          5.4         3.9          1.7         0.4

Les données dans l’ordinateur (2)

  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
6          5.4         3.9          1.7         0.4

! : convention différente en RNA-seq

Représentons ces données : une fleur (1)

mes.iris[1,]
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2

Comment représenter cette fleur ?

Dans quel espace de réprésentation ?

Représentons ces données : une fleur (2)

plot(mes.iris[1,1:2])

Dans le plan, un point de coordonnées : \(x = 5.1\), \(y = 3.5\)

représenté par un vecteur \(v2 = (5.1, 3.5)\) dans \(\mathbb{R}^2\)

Représentons ces données : une fleur (3)

Dans l’espace, un point de coordonnées :

représenté par un vecteur \(v3 = (\) 5.1 \(,\) 3.5 \(,\) 1.4\()\) dans \(\mathbb{R}^3\)

Représentons ces données : toutes les fleurs (4)

= un nuage de points dans un espace à 4 dimensions

= PAS de représentation possible (pour l’instant)

Représentons ces données : une variable à la fois (1)

Représentons ces données : deux variables à la fois (2)

Il faut tenir compte de toutes les dimensions

c’est à dire de toutes les variables à notre disposition

Clustering et classification (termes anglais)

On a une information sur nos données

Clustering : on cherche à mettre en évidence des groupes dans les données

Clustering et classification (termes anglais)

On a une information sur nos données

Clustering : on cherche à mettre en évidence des groupes dans les données

Classification :

Clustering

données simulées : y a-t-il des groupes ?

données simulées : y a-t-il des groupes ?

Géométrie et distances (1)

On considère les données comme des points de \(\mathbb{R}^n\)

\(\mathbb{R}^n\) : espace Euclidien à \(n\) dimensions, où

Géométrie et distances (2)

On considère les données comme des points de \(R^n\) (*)

Géométrie et distances (3)

Sur la base d’une distance (souvent euclidienne)

Distances

Définition d’une distance : fonction positive de deux variables

  1. \(d(x,y) \ge 0\)
  2. \(d(x,y) = d(y,x)\)
  3. \(d(x,y) = 0 \Longleftrightarrow x = y\)
  4. Inégalité triangulaire : \(d(x,z) \le\) d(x,y)+d(y,z)

Si 1,2,3 : dissimilarité

Distance euclidienne

Représentation des vecteurs-individus

Distance euclidienne et distance de corrélation

distance euclidienne coefficient de corrélation distance de corrélation
A - B 4.85 0.93 0.07
A - C 5.59 -0.53 1.53
B - C 1.03 -0.67 1.67

Avec R (1) : distance entre deux individus

distance euclidienne : 2.49

distance de manhattan = 5.32

Avec R (2) : distance entre individus d’un nuage de points

      45    5  115   17
5   0.58               
115 3.97 4.45          
17  0.68 0.55 4.45     
78  3.81 4.30 1.16 4.23
        45      5    115     17
5   0.0025                     
115 0.4445 0.4800              
17  0.0098 0.0024 0.5217       
78  0.2811 0.3105 0.0228 0.3464

Avec R (3) : distance entre variables décrivant le nuage de points

             Sepal.Length Sepal.Width Petal.Length
Sepal.Width         1.723                         
Petal.Length        0.164       1.960             
Petal.Width         0.275       1.949        0.035

Distances entre groupes (1)

Distances entre groupes (2)

\[D(C_1,C_2) = \min_{i \in C_1, j \in C_2} D(x_i, x_j)\]

\[D(C_1,C_2) = \max_{i \in C_1, j \in C_2} D(x_i, x_j)\]

\[D(C_1,C_2) = \frac{1}{N_1 N_2} \sum_{i \in C_1, j \in C_2} D(x_i, x_j)\]

\(d^2(C_i,C_j) = I_{intra}(C_i \cup C_j)-I_{intra}(C_i)-I_{intra}(C_j)\)

\(D(C_1,C_2) = \sqrt{\frac{N_1N_2}{N_1 + N_2}} \| m_1 -m_2 \|\)

Distances entre groupes (4)

Les données

Revenons à nos iris de Fisher

Visualisation des données

On peut ensuite essayer de visualiser les données

plot(mes.iris, col = "grey", las = 1)

Préparation des données (1) : variables de variance nulle

iris.var <- apply(mes.iris, 2, var)
kable(iris.var, digits = 3, col.names = "Variance")
Variance
Sepal.Length 0.686
Sepal.Width 0.190
Petal.Length 3.116
Petal.Width 0.581
sum(apply(mes.iris, 2, var) == 0)
[1] 0

Préparation des données (2) : “Normalisation”

Afin de pouvoir considérer que toutes les variables sont à la même échelle, il est parfois nécessaire de standardiser les données.

mes.iris.centre <- scale(mes.iris, center = TRUE, scale = FALSE)
mes.iris.scaled <- scale(mes.iris, center = TRUE, scale = TRUE)

On peut visuellement regarder l’effet de la standardisation

Centrage sur la moyenne ou la médiane

Mise à l’échelle écart-type ou intervalle interquartile

Standardisation : centrage et mise à l’échelle

La matrice de distance euclidienne

La matrice de distance de corrélation

La classification hiérarchique : principe

classification hiérarchique : mettre en évidence des liens hiérachiques entre les individus

Notion importante, cf distances

L’algorithme : étape 1

Au départ

Identification des individus les plus proches

Construction du dendrogramme

Etape j :

Calcul des nouveaux représentants ‘BE’ et ‘CD’

Calcul des distances de l’individu restant ‘A’ aux points moyens

A est plus proche de …

dendrogramme

pour finir

dendrogramme final

Je ne fais pas attention à ce que je fais …

… c’est à dire aux options des fonctions dist() et hclust()

par(mfrow = c(2, 1))
plot(iris.hclust, hang = -1, cex = 0.5, main = "Données brutes")
plot(iris.scale.hclust, hang = -1, cex = 0.5, main = "Normalisées")

En utilisant une autre métrique

En utilisant un autre critère d’aggrégation

En conclusion

Les heatmap - donnes brutes

pheatmap::pheatmap(mes.iris, clustering.method = "ward.D2")

Les heatmap - mise à l’échelle

pheatmap::pheatmap(mes.iris.scaled, clustering.method = "ward.D2")

Les heatmap - échelle de couleur standardisée par colonne

pheatmap::pheatmap(mes.iris, scale = "column", clustering.method = "ward.D2")

Les heatmap - échelle de couleur standardisée par ligne

pheatmap::pheatmap(mes.iris, scale = "row", clustering.method = "ward.D2")

Les k-means

Les individus dans le plan

=> faire apparaitres des classes / des clusters

L’algorithme

étape 1 :

Choix des centres provisoires

Calcul des distances aux centres provisoires

Affectation à un cluster

Calcul des nouveaux centres de classes

Etape j :

Fin :

Arrêt :

Un premier k-means en 5 groupes

iris.scale.kmeans5 <- kmeans(mes.iris.scaled, center=5)
iris.scale.kmeans5
K-means clustering with 5 clusters of sizes 24, 9, 50, 49, 18

Cluster means:
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1   -0.4045571  -1.3455962   0.04031425 -0.03738991
2    1.9201365  -0.3099829   1.42110076  1.03583907
3    0.4186461  -0.3655555   0.60612988  0.55450771
4   -0.9987207   0.9032290  -1.29875725 -1.25214931
5    1.1351750   0.5057616   1.08750903  1.40026317

Clustering vector:
  [1] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 4 4 4 4 4 4 4 4 3 3 3 1 3 3 3 1 3 1 1 3 1 3 1 3 3 1 1 1 3 3 3 3 3 3 3 3 3 1 1 1 1 3 3 3 3 1 3 1 1 3 1 1 1 3 3 3 1 1 5 3 2 3 5 2 1 2 3 5 5 3 5 3 3 5 3 5 2 1 5 3 2 3 5 2 3 3 3 2 2 5 3 3 3 2 5 3 3 5 5 5 3 5 5 5 3
[148] 3 5 3

Within cluster sum of squares by cluster:
[1] 18.898041  3.091184 30.436677 40.121722 12.220084
 (between_SS / total_SS =  82.4 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"      

Comment déterminer le nombre de clusters ? (1)

Ces méthodes non supervisées, sont sans a priori sur la structure, le nombre de groupe, des données.

rappel : un cluster est composé

Comment déterminer le nombre de clusters ? (2)

Comment déterminer le nombre de clusters ? avec la classification hiérarchique

La coupure de l’arbre à un niveau donné construit une partition. la coupure doit se faire :

plot(iris.scale.hclust.ward, hang = -1, cex = 0.5)

Comment déterminer le nombre de clusters ? avec les kmeans

Comparaison des résultats des deux clustering

Pros et cons des différents algorithmes

Algorithme Pros Cons
Hiérarchique L’arbre reflète la nature imbriquée de tous les sous-clusters Complexité quadratique (mémoire et temps de calcul) \(\rightarrow\) quadruple chaque fois qu’on double le nombre d’individus
Permet une visualisation couplée dendrogramme (groupes) + heatmap (profils individuels)
Choix a posteriori du nombre de clusters
K-means Rapide (linéaire en temps), peut traiter des jeux de données énormes (centaines de milliers de pics ChIP-seq) Positions initiales des centres est aléatoire \(\rightarrow\) résultats changent d’une exécution à l’autre
Distance euclidienne (pas appropriée pour transcriptome par exemple)

Visualisation des données - coloration par espèces

species.colors <- c(setosa = "#BB44DD", virginica = "#AA0044", versicolor = "#4400FF")
plot(mes.iris, col = species.colors[iris$Species], cex = 0.7)

Supplementary materials

POUR ALLER PLUS LOIN

Distances utilisées dans R (1)

Distances utilisées dans R (2)

Note : lors du TP, sur les données d’expression RNA-seq, nous utiliserons le coefficient de corrélation de Spearman et la distance dérivée, \(d_c = 1-r\)

Autres distances non géométriques (pour information)

Utilisées en bio-informatique:

\[d("BONJOUR", "BONSOIR")=2\]

Distances plus classiques en génomique

Il existe d’autres mesures de distances, plus ou moins adaptées à chaque problématique :

Ne sont pas des distances, mais indices de dissimilarité :

v.a 0 1 0 0 0 0 0
v.b 0 1 0 0 0 1 0
v.c 0 1 0 0 0 0 0
          v.a       v.b
v.b 0.3333333          
v.c 0.0000000 0.3333333

Comparaison de clustering: Rand Index

Mesure de similarité entre deux clustering

à partir du nombre de fois que les classifications sont d’accord

\[R=\frac{m+s}{t}\]

Comparaison de clustering: Adjusted Rand Index

\[ \text{ARI} = \frac{\text{RI}-\text{E(RI)}}{\text{Max RI} - \text{E(RI)}}\]

Comparaison des résultats des deux classifications

## Compute adjusted Rand index
(ARI <- aricode::ARI(cluster.hclust5, cluster.kmeans3))
[1] 0.4637776

… par une projection sur une ACP

par(mfrow = c(1,2))
biplot(prcomp(mes.iris), las = 1, cex = 0.7,
       main = "Données non normalisées")
biplot(prcomp(mes.iris, scale = TRUE), las = 1, cex = 0.7,
       main = "Données normalisées")

Supplément : analyse de données d’expression 2019

Contact: