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")
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)
À 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)
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 .