Comment utiliser la méthode Elbow dans R pour trouver des clusters optimaux



L’un des algorithmes de clustering les plus couramment utilisés dans l’apprentissage automatique est connu sous le nom de clustering k-means .

Le clustering K-means est une technique dans laquelle nous plaçons chaque observation d’un ensemble de données dans l’un des K clusters.

L’objectif final est d’avoir K clusters dans lesquels les observations au sein de chaque cluster sont assez similaires les unes aux autres tandis que les observations dans différents clusters sont assez différentes les unes des autres.

Lors du clustering k-means, la première étape consiste à choisir une valeur pour K – le nombre de clusters dans lesquels nous souhaitons placer les observations.

L’une des façons les plus courantes de choisir une valeur pour K est connue sous le nom de méthode du coude , qui consiste à créer un tracé avec le nombre de clusters sur l’axe des x et le total dans la somme des carrés sur l’axe des y, puis à identifier où un « coude » ou un virage apparaît dans l’intrigue.

Le point sur l’axe des x où se produit le « coude » nous indique le nombre optimal de clusters à utiliser dans l’algorithme de clustering k-means.

L’exemple suivant montre comment utiliser la méthode du coude dans R.

Exemple : utilisation de la méthode Elbow dans R

Pour cet exemple, nous utiliserons l’ensemble de données USArrests intégré à R, qui contient le nombre d’arrestations pour 100 000 habitants dans chaque État américain en 1973 pour meurtre, agression et viol, ainsi que le pourcentage de la population de chaque État vivant dans des zones urbaines. , UrbanPop.

Le code suivant montre comment charger l’ensemble de données, supprimer les lignes avec des valeurs manquantes et mettre à l’échelle chaque variable de l’ensemble de données pour avoir une moyenne de 0 et un écart type de 1 :

#load data
df <- USArrests

#remove rows with missing values
df <- na.omit(df)

#scale each variable to have a mean of 0 and sd of 1
df <- scale(df)

#view first six rows of dataset
head(df)

               Murder   Assault   UrbanPop         Rape
Alabama    1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska     0.50786248 1.1068225 -1.2117642  2.484202941
Arizona    0.07163341 1.4788032  0.9989801  1.042878388
Arkansas   0.23234938 0.2308680 -1.0735927 -0.184916602
California 0.27826823 1.2628144  1.7589234  2.067820292
Colorado   0.02571456 0.3988593  0.8608085  1.864967207

Pour trouver le nombre optimal de clusters à utiliser dans l’algorithme k-means, nous utiliserons la fonction fviz_nbclust() du package factoextra pour créer un tracé du nombre de clusters par rapport au total dans la somme des carrés :

library(cluster)
library(factoextra)

#create plot of number of clusters vs total within sum of squares
fviz_nbclust(df, kmeans, method = "wss")

méthode du coude en R

Dans ce graphique, il apparaît qu’il y a un « coude » ou un coude à k = 4 clusters. C’est le point où le total dans la somme des carrés commence à se stabiliser.

Cela nous indique que le nombre optimal de clusters à utiliser dans l’algorithme des k-moyennes est de 4.

Remarque : Bien que nous puissions obtenir un total inférieur dans la somme des carrés en utilisant plus de clusters, nous surajusterions probablement les données d’entraînement et donc l’algorithme des k-moyennes ne fonctionnerait pas aussi bien sur les données de test.

Nous pouvons utiliser la fonction kmeans() du package cluster pour effectuer un clustering k-means sur l’ensemble de données en utilisant la valeur optimale pour k de 4 :

#make this example reproducible
set.seed(1)

#perform k-means clustering with k = 4 clusters
km <- kmeans(df, centers = 4, nstart = 25)

#view results
km

K-means clustering with 4 clusters of sizes 16, 13, 13, 8

Cluster means:
      Murder    Assault   UrbanPop        Rape
1 -0.4894375 -0.3826001  0.5758298 -0.26165379
2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
3  0.6950701  1.0394414  0.7226370  1.27693964
4  1.4118898  0.8743346 -0.8145211  0.01927104

Clustering vector:
       Alabama         Alaska        Arizona       Arkansas     California       Colorado 
             4              3              3              4              3              3 
   Connecticut       Delaware        Florida        Georgia         Hawaii          Idaho 
             1              1              3              4              1              2 
      Illinois        Indiana           Iowa         Kansas       Kentucky      Louisiana 
             3              1              2              1              2              4 
         Maine       Maryland  Massachusetts       Michigan      Minnesota    Mississippi 
             2              3              1              3              2              4 
      Missouri        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
             3              2              2              3              2              1 
    New Mexico       New York North Carolina   North Dakota           Ohio       Oklahoma 
             3              3              4              2              1              1 
        Oregon   Pennsylvania   Rhode Island South Carolina   South Dakota      Tennessee 
             1              1              1              4              2              4 
         Texas           Utah        Vermont       Virginia     Washington  West Virginia 
             3              1              2              1              1              2 
     Wisconsin        Wyoming 
             2              1 

Within cluster sum of squares by cluster:
[1] 16.212213 11.952463 19.922437  8.316061
 (between_SS / total_SS =  71.2 %)

Available components:

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

D’après les résultats, nous pouvons voir que :

  • 16 États ont été affectés au premier cluster
  • 13 États ont été affectés au deuxième cluster
  • 13 États ont été affectés au troisième cluster
  • 8 États ont été affectés au quatrième cluster

Nous pouvons également ajouter les affectations de cluster de chaque état à l’ensemble de données d’origine :

#add cluster assigment to original data
final_data <- cbind(USArrests, cluster = km$cluster)

#view final data
head(final_data)

	    Murder	Assault	UrbanPop  Rape	 cluster
				
Alabama	    13.2	236	58	  21.2	 4
Alaska	    10.0	263	48	  44.5	 2
Arizona	     8.1	294	80	  31.0	 2
Arkansas     8.8	190	50	  19.5	 4
California   9.0	276	91	  40.6	 2
Colorado     7.9	204	78	  38.7	 2

Chaque observation de la base de données originale a été placée dans l’un des quatre groupes.

Ressources additionnelles

Les didacticiels suivants fournissent des exemples étape par étape sur la manière d’exécuter divers algorithmes de clustering dans R :

Clustering K-Means dans R : exemple étape par étape
Clustering K-Medoids dans R : exemple étape par étape
Clustering hiérarchique dans R : exemple étape par étape

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *