• Aucun résultat trouvé

Données à plus de deux dimensions – Statistique multivariée

Catégorie 1 Catégorie 2 Éch/pop 1

94. Classification – 3. Réaliser la classification

PACKAGE(S)ADDITIONNEL(S)UTILISÉ(S)DANS CETTE FICHE 1cluster,2factoextra,3clValid,4fpc

B Il est supposé que les étapes précédentes d’une bonne classification ont été réalisées (voir fiches92à93).

B

Il existe deux grandes familles de méthodes de classification :

— Les méthodes departitionnement, auxquelles on doit fournir le nombre de groupesa priori (identifié par des analyses dédiées, voir fiche93) et qui trouvent la meilleure façon de créer de tels groupes.

— Les méthodeshiérarchiques, qui n’ont pas d’a priorisur le nombre de groupes et aboutissent à un arbre (de type phylogénétique) appelédendrogramme. Cet arbre est ensuite « coupé » au niveau du nombre de groupes optimal (voir fiche93). Pour obtenir un dendrogramme, il y a deux possibilités :

— Partir des individus et les agglomérer petit à petit jusqu’à ne former qu’un seul groupe les réunissant tous. C’est l’objet des méthodesascendanteshiérarchiques.

— Partir d’un unique groupe réunissant tous les individus et le diviser petit à petit jusqu’à former autant de groupes qu’il y a d’individus. C’est l’objet des méthodesdescendanteshiérarchiques.

Partitionnement

La méthode décrite ici est celle desk-medoids(ouPartitioning Around Medoids,PAM), une extension plus robuste de la méthode plus connue desk-means.

Pour la mettre en œuvre :classif<-pam(mat.dist,k=nb)1oùmat.distest une matrice de dis-tance (calculée à partir d’un ensemble de variables ou qui constitue le jeu de données lui-même, voir fiche100) etnble nombre de groupes souhaité. Le groupe auquel appartient chaque individu est renvoyé dansclassif$clustering.

Pour les grands jeux de données, voir?clara1. Classification hiérarchique

Classification ascendante hiérarchique

La première étape est de créer le dendrogramme :dendro<-agnes(mat.dist,method="ward")1. L’argumentmethodprécise le critère sur lequel se fait le regroupement des individus, celui de Ward est le plus courant (voir?agnespour d’autres possibilités). Pour visualiser le dendrogramme : fviz_dend(den-dro)2.

La seconde étape est de couper le dendrogramme au niveau adéquat pour obtenir le nombre optimal de groupes. Pour cela :classif<-cutree(dendro,k=nb). La fonction renvoie le groupe auquel appar-tient chaque individu. Pour représenter ces groupes sur le dendrogramme, ajouter l’argumentk=nbà la fonctionfviz_dend()2.

Classification descendante hiérarchique

Les deux étapes sont similaires à la méthode précédente, sauf que le dendrogramme est construit dans le sens inverse. On créé d’abord le dendrogramme :dendro<-diana(mat.dist)1. Pour le visualiser : fviz_dend(dendro)2. On coupe ensuite le dendrogramme pour affecter chaque individu à un groupe : classif<-cutree(dendro,k=nb). On peut là encore représenter les groupes sur le dendrogramme en utilisant l’argumentk=nbde la fonctionfviz_dend()2.

Quelle méthode choisir ?

Aux conditions (i) que le jeu de données soit un tableau de variables et (ii) que la distance utilisée pour calculer la matrice de distance soit euclidienne, de Manhattan ou basée sur la corrélation de Pearson (voir

étapes. D’abordtest<-clValid(tableau,nClust=nb,clMethods=c("pam","agnes","diana"), validation=c("internal","stability"),method="ward")3oùtableauest le jeu de données et nble nombre de groupes optimal. L’argumentvalidationprécise que l’on veut comparer les trois méthodes à la fois sur des critères ditsinterneset d’autres dits destabilité. Le résultat de la comparaison est ensuite obtenuviasummary(test), dans le tableauOptimal Scores. Pour chacun des sept critères (les quatre premiers de stabilité, les trois suivants internes), la colonneMethoddonne la méthode la plus efficace. Choisir celle qui ressort le plus souvent comme la plus efficace.

Remarque :la fonctionclValid()3utilise la distance euclidienne par défaut. Utiliser l’argument metricpour choisir une autre mesure de distance.

Si l’on ne peut pas réaliser directement la comparaison des trois méthodes, on peut toujours le faire manuellement. On se base pour cela sur trois indices de validation interne : la largeur de Silhouette (Silhouette width) (voir fiche94), l’indice de Dunn et la connectivité. Pour chacune des trois méthodes de classification, calculer ces indices :

— largeur de Silhouette :cluster.stats(mat.dist,clustering=classif)$avg.silwidth4où classifest le vecteur contenant le groupe de chaque individu (sous forme numérique)

— indice de Dunn :cluster.stats(mat.dist,clustering=classif)$dunn4(idem)

— connectivité :connectivity(mat.dist,clusters=classif)3(idem).

Du point de vue de la largeur de Silhouette, la méthode donnant la valeur maximale est la meilleure. Il en est de même pour l’indice de Dunn. Du point de vue de la connectivité, la méthode donnant la valeur minimale est la meilleure.

95. Classification – 4. Valider le résultat d’une classification

PACKAGE(S)ADDITIONNEL(S)UTILISÉ(S)DANS CETTE FICHE 1cluster

B Il est supposé que les étapes précédentes d’une bonne classification ont été réalisées (voir fiches92à94).

B

Les méthodes de classification sont globalement très efficaces, mais il peut arriver qu’un petit nombre d’individus soient mal classés (ou du moins c’est ce que l’on suppose, puisqu’on ne connaît pas les

« vrais » groupes). Pour identifier ces individus, on peut utiliser l’indice Silhouette. Celui-ci est calculé pour chaque individu et varie entre -1 et 1 :

— une valeur proche de 1 indique un individu très probablement bien classé

— une valeur proche de 0 indique un individu « à cheval » entre deux groupes

— une valeur négative indique un individu probablement mal classé.

Pour calculer les valeurs de l’indice Silhouette :sil<-silhouette(classif,mat.dist)1où clas-sifest le vecteur contenant le groupe de chaque individu (sous forme numérique, voir fiche94) et mat.distla matrice de distance (calculée à partir d’un ensemble de variables ou qui constitue le jeu de données lui-même, voir fiche100). La fonction renvoie un tableau avec pour chaque individu son groupe tel que défini par la méthode de classification (colonnecluster), le groupe voisin dont il est le plus proche (colonneneighbor) et l’indice Silhouette (colonnesil_width). Si un individu a une valeur d’indice négative, changer manuellement son groupe dans le vecteurclassifen le remplaçant par le groupe le plus proche (auquel il appartient plus probablement).

Pour aider à s’y retrouver dans les valeurs d’indice Silhouette, on peut :

— les représenter graphiquement :plot(sil). Sur le graphe sont aussi affichés les effectifs par groupe, l’indice Silhouette moyen par groupe et l’indice Silhouette moyen tous groupes confondus

— les réordonner dans le même ordre que sur le graphe :sortSilhouette(sil)1.

EXEMPLE(S)

On obtient les valeurs suivantes d’indice Silhouette (uniquement les cinq premiers individus) : cluster neighbor silwidth

[1,] 3 2 0.46165580

[2,] 2 3 0.17075888

[3,] 2 3 -0.04842929

[4,] 3 2 0.55999150

[5,] 3 2 0.46112097

L’individu 3, qui avait été classé dans le groupe 2, a une valeur d’indice négative. Il appartient donc probablement non pas au groupe 2 mais au groupe le plus proche,i.e.le groupe 3. On change donc le groupe de cet individu dans le vecteurclassif(qui contient les groupes) :

> classif[3] <- 3