आर

2013-08-04 7 views
5

में के-मीन्स क्लस्टरिंग के लिए क्लस्टर की इष्टतम संख्या खोजने के लिए कोहनी विधि को कार्यान्वित करना मैं अपने डेटासेट के लिए के-मीन्स क्लस्टरिंग का उपयोग करना चाहता हूं। मैं ऐसा करने के लिए आर में kmeans() फ़ंक्शन का उपयोग कर रहा हूं।आर

k<-kmeans(data,centers=3) 
plotcluster(m,k$cluster) 

हालांकि मुझे यकीन नहीं है कि इस समारोह के लिए के सही मूल्य क्या है। मैं इसके लिए Elbow Method का उपयोग करना चाहता हूं। क्या आर में कोई पैकेज है जो क्लस्टर की इष्टतम संख्या खोजने के लिए कोहनी विधि का उपयोग करके क्लस्टरिंग करता है।

+2

में मदद करता है के साथ इष्टतम कश्मीर (एक 54 स्तंभ डेटासेट पर हो रही है इसके संचालन के लिए मेरी समाधान (सभी पूर्णांकों) है "कोहनी" हमेशा अनजाने में पहचाना नहीं जा सकता है। "मुझे लगता है कि इस विधि में कुछ व्यक्तिपरकता है, जो कार्यान्वयन को मुश्किल बनाता है। – Roland

+2

[संभावित में क्लस्टर विश्लेषण: समूहों की इष्टतम संख्या निर्धारित करने के संभावित डुप्लिकेट] (http: // stackoverflow। कॉम/प्रश्न/15376075/क्लस्टर-विश्लेषण-इन-आर-निर्धारित-इष्टतम-संख्या-क्लस्टर) –

उत्तर

2

मेरा अनुभव यह है कि आप इसे स्वचालित नहीं कर सकते --- आपको साजिश बनाने और कोहनी की जांच करने की आवश्यकता है। यहां कुछ अच्छे उदाहरण दिए गए हैं: Cluster analysis in R: determine the optimal number of clusters

+0

मैं तीन एड ऐसा कर रहा है..लेकिन मुझे जो ग्राफ मिला है वह विकिपीडिया लेख में से बहुत अलग है ... – user1946152

+1

से कोहनी बिंदु को ढूंढना बहुत मुश्किल है, आप कुछ भी स्वचालित कर सकते हैं - मुद्दा यह है कि स्वचालन को कितना भरोसेमंद लगता है घुटने :) –

+2

हाय फिर से। यदि कोहनी ग्राफ में स्पष्ट नहीं है, तो वास्तव में यह संकेत है कि क्लस्टर की संख्या के लिए एक "सही" उत्तर नहीं है, के। आप अन्य मेट्रिक्स (एआईसी/बीआईसी) या अन्य क्लस्टरिंग विधियों का प्रयास कर सकते हैं। हालांकि, नीचे की रेखा हो सकती है कि आपको k (उदा। विषय-वस्तु विशेषज्ञता) चुनने के लिए एक गैर-सांख्यिकीय विधि की आवश्यकता है। (पी। आगे बढ़ें और ग्राफ़ पोस्ट करें यदि आप कुछ साझा कर सकते हैं!) – stackoverflax

8

यहां दो प्रश्न मिश्रित हैं। एक वक्र पर एक परिवर्तन बिंदु कैसे प्राप्त करें, और दूसरा डेटा वर्गीकृत करने के लिए के-साधनों का उपयोग करते समय फिट की गुणवत्ता को मापने के तरीके के बारे में है। हालांकि, क्लस्टर-विश्लेषण लोग इन दोनों सवालों को एक साथ जोड़ते हैं। जो भी फिट मीट्रिक आपके मामले के लिए सबसे उचित लगता है, का उपयोग करके अन्य वक्र-फिट/परिवर्तन बिंदु विधियों को देखने से डरो मत।

मुझे पता है कि आपके द्वारा लिंक की गई 'कोहनी' विधि एक विशिष्ट विधि है, लेकिन आपको बेयसियन सूचना मानदंड (बीआईसी) में 'घुटने' की तरह कुछ ऐसा लगता है। क्लिकर्स (के) की संख्या बनाम बीआईसी में कंक वह बिंदु है जिस पर आप तर्क दे सकते हैं कि अधिक जटिल समाधान की अतिरिक्त कम्प्यूटेशनल आवश्यकताओं को देखते हुए अधिक क्लस्टर जोड़कर बीआईसी में वृद्धि करना फायदेमंद नहीं है। एक अच्छी विधि है जो बीआईसी के दूसरे व्युत्पन्न के संकेत में परिवर्तन से अधिकतम संख्या में क्लस्टर का पता लगाती है। उदाहरण देखें

झाओ, क्यू, वी। हौतामाकी, और पी। फ्रांति 2008 ए: क्लस्टर की संख्या का पता लगाने के लिए बीआईसी में घुटने बिंदु का पता लगाना। इंटेलिजेंट विजन सिस्टम्स, जे ब्लैंक-टैलॉन, एस। ब्रेनन, डब्ल्यू फिलिप्स, डी। पोपेस्कु, और पी। Scheunders, एड्स, स्प्रिंगर बर्लिन/हेडेलबर्ग, कंप्यूटर विज्ञान में व्याख्यान नोट्स, वॉल्यूम के लिए उन्नत अवधारणाओं। 525 9, 664-673, डोई: 10.1007/978-3-540-88458-3 60.

झाओ, क्यू, एम। जू, और पी। फ्रांति, 2008 बी: बेयसियन सूचना मानदंड पर घुटने बिंदु का पता लगाना। आर्टिफिशियल इंटेलिजेंस के साथ टूल्स, 2008. आईसीटीएआई 08। 20 वें आईईईई इंटर-राष्ट्रीय सम्मेलन, वॉल्यूम। 2, 431 -438, डोई: 10.1109/ICTAI.2008.154

आप इस के लिए एक स्वचालित अनुप्रयोग डेटा मौसम में रुचि हो सकती, सामान्य दृष्टिकोण का एक बहुत अच्छा विचार विमर्श के लिए http://journals.ametsoc.org/doi/abs/10.1175/JAMC-D-11-0227.1

भी देखें Finding the best trade-off point on a curve में सूचना दी।

एक अंतिम अवलोकन: सुनिश्चित करें कि आप अपने लॉगरिदम में सुसंगत हैं। विभिन्न समुदाय अलग-अलग नोटेशन का उपयोग करते हैं, और परिणाम की तुलना करते समय यह त्रुटि का स्रोत हो सकता है।

3

हां, आप कोहनी विधि का उपयोग करके क्लस्टर की सबसे अच्छी संख्या पा सकते हैं, लेकिन मुझे स्क्रिप्ट का उपयोग करके कोहनी ग्राफ से क्लस्टर के मूल्य को खोजने में परेशानी होती है। आप कोहनी ग्राफ का निरीक्षण कर सकते हैं और कोहनी बिंदु स्वयं पा सकते हैं, लेकिन यह स्क्रिप्ट से इसे खोजने में बहुत काम था।

तो दूसरा विकल्प यह देखने के लिए Silhouette Method का उपयोग करना है। सिल्हूट का नतीजा पूरी तरह से कोहनी विधि के परिणाम का अनुपालन करता है।

यहां मैंने जो किया है।

#Dataset for Clustering 
n = 150 
g = 6 
set.seed(g) 
d <- data.frame(x = unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i^2))), 
       y = unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i^2)))) 
mydata<-d 
#Plot 3X2 plots 
attach(mtcars) 
par(mfrow=c(3,2)) 

#Plot the original dataset 
plot(mydata$x,mydata$y,main="Original Dataset") 

#Scree plot to deterine the number of clusters 
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var)) 
    for (i in 2:15) { 
    wss[i] <- sum(kmeans(mydata,centers=i)$withinss) 
} 
plot(1:15, wss, type="b", xlab="Number of Clusters",ylab="Within groups sum of squares") 

# Ward Hierarchical Clustering 
d <- dist(mydata, method = "euclidean") # distance matrix 
fit <- hclust(d, method="ward") 
plot(fit) # display dendogram 
groups <- cutree(fit, k=5) # cut tree into 5 clusters 
# draw dendogram with red borders around the 5 clusters 
rect.hclust(fit, k=5, border="red") 

#Silhouette analysis for determining the number of clusters 
library(fpc) 
asw <- numeric(20) 
for (k in 2:20) 
    asw[[k]] <- pam(mydata, k) $ silinfo $ avg.width 
k.best <- which.max(asw) 

cat("silhouette-optimal number of clusters:", k.best, "\n") 
plot(pam(d, k.best)) 

# K-Means Cluster Analysis 
fit <- kmeans(mydata,k.best) 
mydata 
# get cluster means 
aggregate(mydata,by=list(fit$cluster),FUN=mean) 
# append cluster assignment 
mydata <- data.frame(mydata, clusterid=fit$cluster) 
plot(mydata$x,mydata$y, col = fit$cluster, main="K-means Clustering results") 

उम्मीद है कि यह मदद करता है !!

+1

परिणामों के कुछ चित्र और विचार प्रक्रिया की थोड़ी अधिक व्याख्या इस व्यापक उत्तर को एक महान उत्तर में बदल देगी! –

0

मैंने जीएमडी पैकेज की कोशिश की। किसी कारण से इसमें बहुत समय लगा और में त्रुटि के साथ वापस आया। Elbow.batch (css.obj) में त्रुटि: एक अच्छा k' is not available with provided inc.thres and ev.thres; please make adjustment, e.g. decrease ev.thres ', inc.thres' or increase k' बढ़ाएं। "यह:

तो यह 6000 + पंक्तियों

mydata <- read.csv(file.choose(), header = TRUE) 
mydata_scaled <- as.data.frame(lapply(mydata, scale)) 
mss <- (nrow(mydata_scaled)-1)*sum(apply(mydata_scaled,2,var)) 
for (i in 2:15) mss[i] <- sum(kmeans(mydata_scaled,centers=i)$withinss) 
plot(1:15, mss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares") 

आशा व्यक्त की कि विकिपीडिया लेख से