Big Data Analytics - Clustering K-Means

Le regroupement de k-means vise à partitionner n observations en k groupes dans lesquels chaque observation appartient au groupe avec la moyenne la plus proche, servant de prototype du groupe. Cela se traduit par un partitionnement de l'espace de données en cellules Voronoi.

Étant donné un ensemble d'observations (x 1 , x 2 ,…, x n ) , où chaque observation est un vecteur réel à d dimensions, le regroupement de k-moyennes vise à partitionner les n observations en k groupes G = {G 1 , G 2 ,…, G k } afin de minimiser la somme des carrés intra-cluster (WCSS) définie comme suit -

$$ argmin \: \ sum_ {i = 1} ^ {k} \ sum_ {x \ in S_ {i}} \ parallel x - \ mu_ {i} \ parallel ^ 2 $$

La dernière formule montre la fonction objectif qui est minimisée afin de trouver les prototypes optimaux dans le clustering k-means. L'intuition de la formule est que nous aimerions trouver des groupes qui sont différents les uns des autres et que chaque membre de chaque groupe devrait être similaire aux autres membres de chaque cluster.

L'exemple suivant montre comment exécuter l'algorithme de clustering k-means dans R.

library(ggplot2)
# Prepare Data 
data = mtcars  

# We need to scale the data to have zero mean and unit variance 
data <- scale(data)  

# Determine number of clusters 
wss <- (nrow(data)-1)*sum(apply(data,2,var)) 
for (i in 2:dim(data)[2]) { 
   wss[i] <- sum(kmeans(data, centers = i)$withinss) 
}  

# Plot the clusters 
plot(1:dim(data)[2], wss, type = "b", xlab = "Number of Clusters", 
   ylab = "Within groups sum of squares")

Afin de trouver une bonne valeur pour K, nous pouvons tracer la somme des carrés à l'intérieur des groupes pour différentes valeurs de K. Cette métrique diminue normalement à mesure que davantage de groupes sont ajoutés, nous aimerions trouver un point où la diminution de la somme à l'intérieur des groupes des carrés commence à diminuer lentement. Dans le graphique, cette valeur est mieux représentée par K = 6.

Maintenant que la valeur de K a été définie, il est nécessaire d'exécuter l'algorithme avec cette valeur.

# K-Means Cluster Analysis
fit <- kmeans(data, 5) # 5 cluster solution 

# get cluster means  
aggregate(data,by = list(fit$cluster),FUN = mean) 

# append cluster assignment 
data <- data.frame(data, fit$cluster)