K signifie clustering dans R : tutoriel étape par étape avec exemple
Publié: 2020-02-17En tant que data scientist, vous ferez beaucoup de clustering. Il existe de nombreux types d'algorithmes de clustering disponibles, et vous devez savoir les utiliser tous. Dans cet article, nous discuterons d'un algorithme de clustering populaire, K-means, et verrons comment il est utilisé dans R.
Vous découvrirez la théorie de base derrière le clustering K-means dans R et comment il est utilisé. Nous avons également discuté d'un exemple pratique plus loin dans l'article. Assurez-vous de mettre cet article en signet pour référence future. En savoir plus sur l'analyse de clustering dans Data Mining.
Avant de commencer à discuter de K signifie clustering dans R, nous devrions jeter un coup d'œil aux types d'algorithmes de clustering qui sont présents afin que vous puissiez mieux comprendre comment cet algorithme les traite.
Lire : Les meilleures bibliothèques R en science des données
Table des matières
Types de regroupement
Lorsque vous regroupez plusieurs objets de manière à ce que les objets qui se ressemblent le plus soient dans un cluster proche, cela s'appelle le clustering. La distance entre les objets pourrait être pertinente pour leur similitude. La similarité montre la force de la relation entre deux objets distincts en science des données. Le clustering est une technique d'exploration de données populaire. Le clustering trouve ses applications dans de nombreux secteurs et domaines, notamment l'analyse d'images, l'apprentissage automatique, la compression de données, la reconnaissance de formes et bien d'autres.
Le clustering est de deux types - Hard et Soft. Discutons brièvement de chacun d'eux.
- Dans un cluster dur, un point de données appartiendrait totalement à un cluster, ou ne lui appartiendrait pas du tout. Il n'y a pas d'entre-deux.
- Dans un cluster souple, un objet de données peut être lié à plusieurs clusters à la fois en raison d'une certaine vraisemblance ou probabilité.
Apprenez le cours de science des données en ligne des meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.
Types d'algorithmes de clustering
Comme il existe différents types de clusters, il existe également différents types d'algorithmes de clustering. Vous pouvez différencier les algorithmes en fonction de leur modèle de cluster. Cela signifie que vous pouvez les distinguer en fonction de la façon dont ils forment des clusters. Si nous commencions à parler de toutes sortes d'algorithmes de clustering, ce guide deviendrait trop long et loin de l'essentiel. Nous ne discuterons donc que de quelques types importants d'algorithmes de clustering. Il existe des algorithmes de clustering basés sur la connectivité, basés sur le centroïde, basés sur la densité et basés sur la distribution.
Concept de base de K-Means
Le concept de base de K-means est assez simple. K-means est lié à la définition des clusters de sorte que la variation totale au sein d'un cluster soit aussi minimale que possible. Il existe une variété d'algorithmes de k-moyennes. L'algorithme k-means le plus courant est l'algorithme Hartigan-Wong, qui stipule que la variation intra-cluster totale est égale à la somme des distances au carré Distances euclidiennes entre les centroïdes et leurs éléments :
W( C k )= X je C k ( X je - k ) 2
Ici x i fait référence à un point de données qui appartient au groupe C k et k fait référence à la valeur moyenne des points de données présents dans le groupe Ck.
La valeur de x i doit être telle que la somme de la distance au carré entre x i et k soit le minimum.
Qu'est-ce que l'algorithme K-means ?
Pour utiliser l'algorithme, nous devrons d'abord indiquer le nombre de clusters, K, qui seront présents dans notre résultat. L'algorithme sélectionne d'abord K objets au hasard pour agir comme centres de cluster initiaux. Nous appelons ces objets des centroïdes de cluster ou des moyens. Ensuite, nous attribuons les objets restants à leurs centroïdes les plus proches. La distance euclidienne entre les centres de gravité du cluster et les objets détermine leur proximité.
Après avoir attribué les objets à leurs centroïdes respectifs, l'algorithme calcule la valeur moyenne des clusters. Après ce nouveau calcul, nous vérifions à nouveau les observations pour voir si elles pourraient être plus proches d'un cluster différent. Ensuite, nous réaffectons les objets aux centroïdes en conséquence. Nous continuons à répéter ces étapes jusqu'à ce que l'attribution des clusters s'arrête. Cela signifie que nous arrêtons de répéter les itérations lorsque les clusters formés dans une itération sont les mêmes que ceux de leur itération précédente.
Utilisation du clustering K-Means (exemple)
Maintenant que vous savez ce qu'est l'algorithme K-means dans R et comment il fonctionne, discutons d'un exemple pour une meilleure clarification. Dans cet exemple, nous allons regrouper les clients d'une organisation en utilisant la base de données des clients grossistes. Les données de ce problème sont disponibles dans le référentiel d'apprentissage automatique de Berkley UCI. Vous pouvez le vérifier ici .
Tout d'abord, nous allons lire les données. Et puis obtenez un résumé de celui-ci. Après avoir lu les données et vu leur résumé, vous verrez qu'il existe des différences marquées entre les principaux consommateurs dans différentes catégories. Vous trouverez des valeurs aberrantes, que vous ne pouvez pas supprimer facilement avec la normalisation (ou la mise à l'échelle). Avec ces données, une entreprise voudrait voir ce que ses clients de milieu de gamme achètent la plupart du temps. C'est parce qu'une entreprise aurait une bonne idée de ce que ses principaux clients achètent.
Pour créer un groupe de clients de niveau intermédiaire, nous devons d'abord nous débarrasser de la couche supérieure de clients de chaque catégorie. Nous allons donc supprimer les 5 premiers et créer un nouvel ensemble. Voici comment nous procéderons :
top.n.custs <- function (data,cols,n=5) { #Nécessite une trame de données et le top N à supprimer
idx.to.remove <-integer(0) #Initialise un vecteur pour contenir les clients en cours de suppression
for (c in cols){ # Pour chaque colonne des données que nous avons transmises à cette fonction
col.order <-order(data[,c],decreasing=T) #Trier la colonne "c" dans l'ordre décroissant (plus grand en haut)
#Order renvoie l'index trié (par exemple la ligne 15, 3, 7, 1, …) plutôt que les valeurs réelles triées.
idx <-head(col.order, n) #Prenez le premier n de la colonne triée C pour
idx.to.remove <-union(idx.to.remove,idx) #Combinez et dédupliquez les identifiants de ligne qui doivent être supprimés
}
return(idx.to.remove) #Renvoie les index des clients à supprimer
}
top.custs <-top.n.custs(data,cols=3:8,n=5)
length(top.custs) #Combien de clients faut-il supprimer ?
data[top.custs,] #Examinez les clients disponibles

data.rm.top<-data[-c(top.custs),] #Supprimer les clients requis
Avec ce nouveau fichier, nous pouvons commencer à travailler sur notre analyse de cluster. Pour effectuer l'analyse de cluster, nous allons utiliser le code suivant :
set.seed(76964057) #Définir la graine pour la reproductibilité
k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Créer 5 clusters, supprimer les colonnes 1 et 2
k$centers #Afficher les centres de cluster
table(k$cluster) #Donnez le nombre de points de données dans chaque cluster
Lorsque vous aurez exécuté ce code sur la base de données donnée, vous obtiendrez ces résultats :
- Le premier groupe aurait des détergents de haute qualité mais la faible quantité de produits alimentaires frais
- Le troisième groupe aurait plus de produits frais
Vous aurez besoin d'utiliser withinss et betweenss pour une interprétation détaillée des résultats. k$withinss est égal à la somme des carrés de distance entre chaque objet de données à partir du centre du cluster. Plus la plage est basse, meilleur sera le résultat. Si la mesure intérieure est élevée dans vos données, cela signifie qu'il existe de nombreuses valeurs aberrantes et que vous devez effectuer un nettoyage des données. k$betweenss est la somme des carrés des distances entre les différents centres des clusters. La distance entre les centres de cluster doit être aussi élevée que possible.
Lire : 6 structures de données les plus couramment utilisées dans R
Vous devriez vous aider d'essais et d'erreurs pour obtenir les résultats les plus précis. Pour ce faire, vous devrez essayer différentes valeurs pour K. Lorsque le graphique de vos résultats ne montre pas d'incrément dans l'intérieur de vos clusters, ce point serait la valeur la plus appropriée pour K. Vous pouvez trouver la valeur de K par le code suivant :
rng<-2:20 #K de 2 à 20
essais <-100 #Exécuter l'algorithme K Means 100 fois
avg.totw.ss <-integer(length(rng)) #Configurer un vecteur vide pour contenir tous les points
for(v in rng){ # Pour chaque valeur de la variable de plage
v.totw.ss <-integer(tries) #Configurer un vecteur vide pour contenir les 100 essais
for(i in 1:tentes){
k.temp <-kmeans(data.rm.top,centers=v) #Exécuter kmeans
v.totw.ss[i] <-k.temp$tot.withinss#Stocker le total withinss
}
avg.totw.ss[v-1] <-mean(v.totw.ss) #Average the 100 total withinss
}
plot(rng,avg.totw.ss,type=”b”, main=”Total dans SS par divers K”,
ylab = "Total moyen dans la somme des carrés",
xlab="Valeur de K")
C'est ça. Vous pouvez maintenant utiliser le graphique obtenu à partir de ce code pour obtenir la meilleure valeur pour K et l'utiliser pour obtenir les résultats requis. Utilisez cet exemple pour tester vos connaissances sur le clustering K-means dans R. Voici tout le code que nous avons utilisé dans l'exemple :
data <-read.csv(“Données clients grossistes.csv”,header=T)
résumé (données)
top.n.custs <- function (data,cols,n=5) { #Nécessite une trame de données et le top N à supprimer
idx.to.remove <-integer(0) #Initialise un vecteur pour contenir les clients en cours de suppression
for (c in cols){ # Pour chaque colonne des données que nous avons transmises à cette fonction
col.order <-order(data[,c],decreasing=T) #Trier la colonne "c" dans l'ordre décroissant (plus grand en haut)
#Order renvoie l'index trié (par exemple la ligne 15, 3, 7, 1, …) plutôt que les valeurs réelles triées.
idx <-head(col.order, n) #Prenez le premier n de la colonne triée C pour
idx.to.remove <-union(idx.to.remove,idx) #Combinez et dédupliquez les identifiants de ligne qui doivent être supprimés
}
return(idx.to.remove) #Renvoie les index des clients à supprimer
}
top.custs <-top.n.custs(data,cols=3:8,n=5)
length(top.custs) #Combien de clients supprimer ?
data[top.custs,] #Examinez les clients
data.rm.top <-data[-c(top.custs),] #Supprimer les clients
set.seed(76964057) #Définir la graine pour la reproductibilité
k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Créer 5 clusters, supprimer les colonnes 1 et 2
k$centers #Afficher les centres de cluster
table(k$cluster) #Donnez un nombre de points de données dans chaque cluster
rng<-2:20 #K de 2 à 20
essais<-100 #Exécutez l'algorithme K Means 100 fois
avg.totw.ss<-integer(length(rng)) #Configurer un vecteur vide pour contenir tous les points
for(v in rng){ # Pour chaque valeur de la variable de plage
v.totw.ss<-integer(tries) #Configurer un vecteur vide pour contenir les 100 essais
for(i in 1:tentes){
k.temp<-kmeans(data.rm.top,centers=v) #Exécuter kmeans
v.totw.ss[i]<-k.temp$tot.withinss#Stocker le total withinss
}
avg.totw.ss[v-1]<-mean(v.totw.ss) #Moyenne des 100 totaux à l'intérieur
}
plot(rng,avg.totw.ss,type=”b”, main=”Total dans SS par divers K”,
ylab = "Total moyen dans la somme des carrés",
xlab="Valeur de K")
Conclusion
Nous espérons que ce guide vous a plu. Nous avons essayé de le garder concis et complet. Si vous avez des questions sur l'algorithme K-means, n'hésitez pas à nous les poser. Nous serions ravis de répondre à vos questions.
Si vous êtes curieux d'en savoir plus sur la science des données, consultez le programme Executive PG en science des données de IIIT-B & upGrad qui est créé pour les professionnels en activité et propose plus de 10 études de cas et projets, des ateliers pratiques, un mentorat avec des experts de l'industrie, 1 -on-1 avec des mentors de l'industrie, plus de 400 heures d'apprentissage et d'aide à l'emploi avec les meilleures entreprises.
Quels sont certains des inconvénients de l'utilisation de K-means ?
Les valeurs aberrantes peuvent tirer des centroïdes, ou les valeurs aberrantes peuvent recevoir leur propre cluster plutôt que d'être ignorées. Comme K-means est stochastique, il ne peut pas garantir que la solution de clustering optimale globale sera trouvée. En réalité, les valeurs aberrantes et les données bruitées peuvent rendre l'algorithme très sensible. Avant de regrouper, envisagez d'éliminer ou de supprimer les valeurs aberrantes. Lors du regroupement de données avec des tailles et des densités variables, K-means a des difficultés. Vous devez généraliser les K-means pour regrouper ces données. Même s'ils appartiennent clairement au même cluster, l'algorithme k-means ne permet pas aux points de données éloignés de partager le même cluster.
Qu'est-ce que la méthode du coude dans K-means ?
La méthode des k-moyennes repose fortement sur la recherche du nombre approprié de clusters. L'approche du coude est une méthode largement utilisée pour déterminer la meilleure valeur K. La technique du coude effectue un clustering K-means sur l'ensemble de données pour une plage de valeurs K sur le graphique, puis calcule un score moyen pour tous les clusters pour chaque valeur de K. Le score de distorsion, qui est la somme des distances carrées de chaque point à son centre assigné, est calculé par défaut. D'autres modèles basés sur les données, tels que le nombre de composants principaux pour caractériser un ensemble de données, peuvent utiliser la même technique pour déterminer le nombre de paramètres.
Comment pouvons-nous trouver des valeurs aberrantes dans K-means ?
Les valeurs aberrantes dans le clustering K-Means peuvent être découvertes en utilisant à la fois une technique basée sur la distance et une technique basée sur le cluster. Les valeurs aberrantes sont découvertes à l'aide de dendrogrammes dans le cas d'un regroupement hiérarchique. L'objectif du projet est de découvrir et d'éliminer les valeurs aberrantes afin de rendre le regroupement plus précis. Les données sont partitionnées en K groupes en les attribuant aux centres de cluster les plus proches dans l'approche d'identification des valeurs aberrantes basée sur K-means. Nous pouvons alors calculer la distance ou la dissimilarité entre chaque élément et son centre de cluster, et choisir les valeurs aberrantes avec les plus grandes distances. Étant donné que les valeurs extrêmes peuvent rapidement avoir un impact sur une moyenne, la méthode de clustering K-means est sensible aux valeurs aberrantes.