Büyük Veri Analitiği - K-Means Kümeleme

k-ortalamalı kümeleme, n gözlemi, her bir gözlemin en yakın ortalama ile kümeye ait olduğu ve kümenin bir prototipi olarak hizmet ettiği k kümelere bölmeyi amaçlar. Bu, veri alanının Voronoi hücrelerine bölünmesiyle sonuçlanır.

Her bir gözlemin d boyutlu bir gerçek vektör olduğu bir dizi gözlem (x 1 , x 2 ,…, x n ) verildiğinde, k-ortalamalı kümeleme n gözlemleri k gruplarına bölmeyi amaçlar G = {G 1 , G 2 ,…, G k } , aşağıdaki gibi tanımlanan küme içi kareler toplamını (WCSS) en aza indirmek için -

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

Sonraki formül, k-ortalamalı kümelemede optimal prototipleri bulmak için en aza indirilen objektif işlevi gösterir. Formülün sezgisi, birbirlerinden farklı gruplar bulmak istediğimiz ve her grubun her üyesinin, her kümenin diğer üyeleriyle benzer olması gerektiğidir.

Aşağıdaki örnek, k-ortalama kümeleme algoritmasının R'de nasıl çalıştırılacağını gösterir.

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

K için iyi bir değer bulmak amacıyla, K'nin farklı değerleri için gruplar içi kareler toplamını çizebiliriz. Bu metrik normalde daha fazla grup eklendikçe azalır, gruplar içindeki azalmanın toplamı kareler yavaş yavaş azalmaya başlar. Grafikte, bu değer en iyi K = 6 ile temsil edilir.

Artık K'nin değeri tanımlandığına göre, algoritmayı bu değerle çalıştırmak gerekiyor.

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