Clustering K-Means dans R : exemple étape par étape



Le clustering est une technique d’apprentissage automatique qui tente de trouver des groupes d’ observations au sein d’un ensemble de données.

L’objectif est de trouver des clusters tels que les observations au sein de chaque cluster soient assez similaires les unes aux autres, tandis que les observations dans différents clusters sont assez différentes les unes des autres.

Le clustering est une forme d’ apprentissage non supervisé car nous essayons simplement de trouver une structure au sein d’un ensemble de données plutôt que de prédire la valeur d’une variable de réponse .

Le clustering est souvent utilisé en marketing lorsque les entreprises ont accès à des informations telles que :

  • Revenu du ménage
  • La taille du ménage
  • Chef de famille Profession
  • Distance de la zone urbaine la plus proche

Lorsque ces informations sont disponibles, le regroupement peut être utilisé pour identifier les ménages similaires et susceptibles d’être plus susceptibles d’acheter certains produits ou de mieux répondre à un certain type de publicité.

L’une des formes de clustering les plus courantes est connue sous le nom de clustering k-means .

Qu’est-ce que le 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.

En pratique, nous utilisons les étapes suivantes pour effectuer un clustering K-means :

1. Choisissez une valeur pour K .

  • Tout d’abord, nous devons décider combien de clusters nous souhaitons identifier dans les données. Souvent, nous devons simplement tester plusieurs valeurs différentes pour K et analyser les résultats pour voir quel nombre de clusters semble avoir le plus de sens pour un problème donné.

2. Attribuez aléatoirement chaque observation à un cluster initial, de 1 à K.

3. Effectuez la procédure suivante jusqu’à ce que les affectations de cluster cessent de changer.

  • Pour chacun des K clusters, calculez le centre de gravité du cluster. Il s’agit simplement du vecteur des p moyennes des caractéristiques pour les observations du k ème cluster.
  • Attribuez chaque observation au cluster dont le centre de gravité est le plus proche. Ici, le plus proche est défini en utilisant la distance euclidienne .

Clustering K-Means dans R

Le didacticiel suivant fournit un exemple étape par étape de la façon d’effectuer un clustering k-moyennes dans R.

Étape 1 : Chargez les packages nécessaires

Tout d’abord, nous allons charger deux packages contenant plusieurs fonctions utiles pour le clustering k-means dans R.

library(factoextra)
library(cluster)

Étape 2 : charger et préparer les données

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 effectuer les opérations suivantes :

  • Charger l’ensemble de données USArrests
  • Supprimez toutes les lignes avec des valeurs manquantes
  • Mettez à 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

Étape 3 : Trouver le nombre optimal de clusters

Pour effectuer un clustering k-means dans R, nous pouvons utiliser la fonction kmeans() intégrée, qui utilise la syntaxe suivante :

kmeans (données, centres, nstart)

où:

  • data : Nom de l’ensemble de données.
  • centres : Le nombre de clusters, noté k .
  • nstart : le nombre de configurations initiales. Étant donné qu’il est possible que différents clusters de départ initiaux conduisent à des résultats différents, il est recommandé d’utiliser plusieurs configurations initiales différentes. L’algorithme k-means trouvera les configurations initiales qui conduisent à la plus petite variation au sein du cluster.

Puisque nous ne savons pas à l’avance combien de clusters est optimal, nous allons créer deux graphiques différents qui peuvent nous aider à décider :

1. Nombre de clusters par rapport au total dans la somme des carrés

Tout d’abord, nous utiliserons la fonction fviz_nbclust() pour créer un tracé du nombre de clusters par rapport au total dans la somme des carrés :

fviz_nbclust(df, kmeans, method = "wss")

Nombre optimal de clusters dans le clustering k-means

Généralement, lorsque nous créons ce type de tracé, nous recherchons un « coude » où la somme des carrés commence à « se plier » ou à se stabiliser. Il s’agit généralement du nombre optimal de clusters.

Pour ce graphique, il semble qu’il y ait un petit coude ou « courbure » à k = 4 clusters.

2. Nombre de clusters par rapport aux statistiques d’écart

Une autre façon de déterminer le nombre optimal de clusters consiste à utiliser une métrique appelée statistique d’écart , qui compare la variation totale intra-cluster pour différentes valeurs de k avec leurs valeurs attendues pour une distribution sans clustering.

Nous pouvons calculer la statistique d’écart pour chaque nombre de clusters à l’aide de la fonction clusGap() du package cluster ainsi qu’un graphique des clusters par rapport aux statistiques d’écart à l’aide de la fonction fviz_gap_stat() :

#calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
                    FUN = kmeans,
                    nstart = 25,
                    K.max = 10,
                    B = 50)

#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat)

Statistique d'écart pour un nombre optimal de clusters

À partir du graphique, nous pouvons voir que la statistique d’écart est la plus élevée à k = 4 clusters, ce qui correspond à la méthode du coude que nous avons utilisée précédemment.

Étape 4 : Effectuer un clustering K-Means avec Optimal K

Enfin, nous pouvons 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 visualiser les clusters sur un nuage de points qui affiche les deux premières composantes principales sur les axes en utilisant la fonction fivz_cluster() :

#plot results of final k-means model
fviz_cluster(km, data = df)

K-means tracé de clustering dans R

Nous pouvons également utiliser la fonction Aggregate() pour trouver la moyenne des variables dans chaque cluster :

#find means of each cluster
aggregate(USArrests, by=list(cluster=km$cluster), mean)

cluster	  Murder   Assault	UrbanPop	    Rape
				
1	3.60000	  78.53846	52.07692	12.17692
2	10.81538 257.38462	76.00000	33.19231
3	5.65625	 138.87500	73.87500	18.78125
4	13.93750 243.62500	53.75000	21.41250

Nous interprétons cette sortie comme suit :

  • Le nombre moyen de meurtres pour 100 000 citoyens parmi les États du groupe 1 est de 3,6 .
  • Le nombre moyen d’agressions pour 100 000 citoyens parmi les États du groupe 1 est de 78,5 .
  • Le pourcentage moyen de résidents vivant dans une zone urbaine parmi les États du groupe 1 est de 52,1 % .
  • Le nombre moyen de viols pour 100 000 citoyens parmi les États du groupe 1 est de 12,2 .

Et ainsi de suite.

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

Avantages et inconvénients du clustering K-Means

Le clustering K-means offre les avantages suivants :

  • C’est un algorithme rapide.
  • Il peut bien gérer de grands ensembles de données.

Cependant, il présente les inconvénients potentiels suivants :

  • Cela nous oblige à spécifier le nombre de clusters avant d’exécuter l’algorithme.
  • Il est sensible aux valeurs aberrantes.

Deux alternatives au clustering k-means sont le clustering k-médoïdes et le clustering hiérarchique .


Vous pouvez trouver le code R complet utilisé dans cet exemple ici .

Ajouter un commentaire

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