बिग डेटा एनालिटिक्स - K- मीन्स क्लस्टरिंग

k- साधन क्लस्टरिंग का उद्देश्य n अवलोकन को k समूहों में विभाजित करना है, जिसमें प्रत्येक अवलोकन निकटतम माध्य के साथ क्लस्टर के अंतर्गत आता है, जो क्लस्टर के प्रोटोटाइप के रूप में कार्य करता है। इसके परिणामस्वरूप डेटा स्थान का विभाजन वोरोनोई कोशिकाओं में होता है।

प्रेक्षणों के एक समूह (x 1 , x 2 ,…, x n ) को देखते हुए , जहाँ प्रत्येक अवलोकन एक d- आयामी वास्तविक सदिश है, k-mean clustering का उद्देश्य n टिप्पणियों को k समूहों में विभाजित करना है G = {G 1 , G 2 ,…, G k } ताकि वर्गों (WCSS) के भीतर-क्लस्टर योग को कम से कम किया जा सके -

$$ argmin \: \ sum_ {i = 1} ^ {k} \ sum_ {x \ _ s_ {i}} \ समानांतर x - \ mu_ {i} \ समानांतर ^ 2 $ $

बाद का फॉर्मूला ऑब्जेक्टिव फंक्शन को दर्शाता है जो कि k- मतलब क्लस्टरिंग में इष्टतम प्रोटोटाइप को खोजने के लिए कम से कम किया जाता है। सूत्र का अंतर्ज्ञान यह है कि हम ऐसे समूहों को खोजना चाहेंगे जो एक-दूसरे के साथ भिन्न हों और प्रत्येक समूह का प्रत्येक सदस्य प्रत्येक समूह के अन्य सदस्यों के साथ समान हो।

निम्न उदाहरण दर्शाता है कि आर में k- साधन क्लस्टरिंग एल्गोरिदम को कैसे चलाना है।

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 के लिए एक अच्छा मूल्य खोजने के लिए, हम K के विभिन्न मानों के लिए वर्गों के योग के भीतर समूहों की साजिश कर सकते हैं। यह मीट्रिक सामान्य रूप से घट जाती है क्योंकि अधिक समूह जोड़े जाते हैं, हम एक बिंदु खोजना चाहेंगे जहां समूहों के योग में कमी हो। चौकों की संख्या धीरे-धीरे कम होने लगती है। प्लॉट में, यह मान K = 6 द्वारा सबसे अच्छा प्रतिनिधित्व करता है।

अब जब कि के मूल्य को परिभाषित किया गया है, तो उस मूल्य के साथ एल्गोरिथ्म को चलाने की आवश्यकता है।

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