Big Data Analytics - K-Means Clustering

k-means Clustering zielt darauf ab, n Beobachtungen in k Cluster zu unterteilen, in denen jede Beobachtung zum Cluster mit dem nächstgelegenen Mittelwert gehört und als Prototyp des Clusters dient. Dies führt zu einer Aufteilung des Datenraums in Voronoi-Zellen.

Bei einer Reihe von Beobachtungen (x 1 , x 2 ,…, x n ) , bei denen jede Beobachtung ein d-dimensionaler reeller Vektor ist, zielt die k-Mittel-Clusterbildung darauf ab, die n Beobachtungen in k Gruppen G = {G 1 , G 2 zu unterteilen ,…, G k } , um die wie folgt definierte Summe der Quadrate (WCSS) innerhalb des Clusters zu minimieren -

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

Die spätere Formel zeigt die Zielfunktion, die minimiert wird, um die optimalen Prototypen beim k-means-Clustering zu finden. Die Intuition der Formel ist, dass wir Gruppen finden möchten, die sich voneinander unterscheiden, und dass jedes Mitglied jeder Gruppe mit den anderen Mitgliedern jedes Clusters ähnlich sein sollte.

Das folgende Beispiel zeigt, wie der k-means-Clustering-Algorithmus in R ausgeführt wird.

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

Um einen guten Wert für K zu finden, können wir die Quadratsumme innerhalb der Gruppen für verschiedene Werte von K darstellen. Diese Metrik nimmt normalerweise ab, wenn mehr Gruppen hinzugefügt werden. Wir möchten einen Punkt finden, an dem die Abnahme der Summe innerhalb der Gruppen abnimmt Die Anzahl der Quadrate nimmt langsam ab. In der Darstellung wird dieser Wert am besten durch K = 6 dargestellt.

Nachdem der Wert von K definiert wurde, muss der Algorithmus mit diesem Wert ausgeführt werden.

# 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)