यदि आपका सवाल है how can I determine how many clusters are appropriate for a kmeans analysis of my data?
, तो यहाँ कुछ विकल्प हैं। विकिपीडिया लेख समूहों की संख्या निर्धारित करने पर इन तरीकों में से कुछ की एक अच्छी समीक्षा है।
सबसे पहले, कुछ प्रतिलिपि प्रस्तुत करने योग्य डेटा (क्यू में डेटा ... मेरे लिए अस्पष्ट हैं):
n = 100
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))))
plot(d)
एक । स्क्वेर्ड एरर (एसएसई) स्क्री प्लॉट के योग में मोड़ या कोहनी देखें। अधिक जानकारी के लिए http://www.statmethods.net/advstats/cluster.html & http://www.mattpeeples.net/kmeans.html देखें । परिणामी भूखंड में कोहनी का स्थान किमी के लिए उपयुक्त क्लस्टर का सुझाव देता है:
mydata <- d
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")
हम यह निष्कर्ष निकाल सकते हैं कि 4 क्लस्टर इस विधि द्वारा इंगित किए जाएंगे:
दो । आप pamk
fpc पैकेज में फ़ंक्शन का उपयोग करके क्लस्टर की संख्या का अनुमान लगाने के लिए मेडोइड्स के आसपास विभाजन कर सकते हैं ।
library(fpc)
pamk.best <- pamk(d)
cat("number of clusters estimated by optimum average silhouette width:", pamk.best$nc, "\n")
plot(pam(d, pamk.best$nc))
# we could also do:
library(fpc)
asw <- numeric(20)
for (k in 2:20)
asw[[k]] <- pam(d, k) $ silinfo $ avg.width
k.best <- which.max(asw)
cat("silhouette-optimal number of clusters:", k.best, "\n")
# still 4
तीन । Calinsky मानदंड: निदान करने के लिए एक और दृष्टिकोण कि कितने क्लस्टर डेटा के अनुरूप हैं। इस मामले में हम 1 से 10 समूहों की कोशिश करते हैं।
require(vegan)
fit <- cascadeKM(scale(d, center = TRUE, scale = TRUE), 1, 10, iter = 1000)
plot(fit, sortg = TRUE, grpmts.plot = TRUE)
calinski.best <- as.numeric(which.max(fit$results[2,]))
cat("Calinski criterion optimal number of clusters:", calinski.best, "\n")
# 5 clusters!
चार । अपेक्षा और अधिकतमकरण के लिए बायेसियन सूचना मानदंड के अनुसार इष्टतम मॉडल और समूहों की संख्या निर्धारित करें, जो मानकीकृत गाऊसी मिश्रण मॉडल के लिए श्रेणीबद्ध क्लस्टरिंग द्वारा आरंभ किया गया है।
# See http://www.jstatsoft.org/v18/i06/paper
# http://www.stat.washington.edu/research/reports/2006/tr504.pdf
#
library(mclust)
# Run the function to see how many clusters
# it finds to be optimal, set it to search for
# at least 1 model and up 20.
d_clust <- Mclust(as.matrix(d), G=1:20)
m.best <- dim(d_clust$z)[2]
cat("model-based optimal number of clusters:", m.best, "\n")
# 4 clusters
plot(d_clust)
पाँच । आत्मीयता प्रसार (एपी) क्लस्टरिंग, http://dx.doi.org/10.1126/science.1136800 देखें
library(apcluster)
d.apclus <- apcluster(negDistMat(r=2), d)
cat("affinity propogation optimal number of clusters:", length(d.apclus@clusters), "\n")
# 4
heatmap(d.apclus)
plot(d.apclus, d)
छह । समूहों की संख्या का अनुमान लगाने के लिए गैप स्टेटिस्टिक। एक अच्छा चित्रमय आउटपुट के लिए कुछ कोड भी देखें । यहाँ 2-10 क्लस्टर आज़मा रहे हैं:
library(cluster)
clusGap(d, kmeans, 10, B = 100, verbose = interactive())
Clustering k = 1,2,..., K.max (= 10): .. done
Bootstrapping, b = 1,2,..., B (= 100) [one "." per sample]:
.................................................. 50
.................................................. 100
Clustering Gap statistic ["clusGap"].
B=100 simulated reference sets, k = 1..10
--> Number of clusters (method 'firstSEmax', SE.factor=1): 4
logW E.logW gap SE.sim
[1,] 5.991701 5.970454 -0.0212471 0.04388506
[2,] 5.152666 5.367256 0.2145907 0.04057451
[3,] 4.557779 5.069601 0.5118225 0.03215540
[4,] 3.928959 4.880453 0.9514943 0.04630399
[5,] 3.789319 4.766903 0.9775842 0.04826191
[6,] 3.747539 4.670100 0.9225607 0.03898850
[7,] 3.582373 4.590136 1.0077628 0.04892236
[8,] 3.528791 4.509247 0.9804556 0.04701930
[9,] 3.442481 4.433200 0.9907197 0.04935647
[10,] 3.445291 4.369232 0.9239414 0.05055486
यहाँ एडविन चेन के गैप स्टैटिस्टिक के कार्यान्वयन से आउटपुट है:
सात । आप क्लस्टर असाइनमेंट की कल्पना करने के लिए क्लस्टरग्राम के साथ अपने डेटा का पता लगाने के लिए भी उपयोगी हो सकते हैं, http://www.r-statistics.com/2010/06/clustergram-visualization-and-diagnostics-for-cluster-analysis.r पर देखें । अधिक जानकारी के लिए कोड / ।
आठ । NbClust पैकेज किसी डेटासेट में समूहों की संख्या निर्धारित करने के लिए 30 सूचकांक प्रदान करता है।
library(NbClust)
nb <- NbClust(d, diss=NULL, distance = "euclidean",
method = "kmeans", min.nc=2, max.nc=15,
index = "alllong", alphaBeale = 0.1)
hist(nb$Best.nc[1,], breaks = max(na.omit(nb$Best.nc[1,])))
# Looks like 3 is the most frequently determined number of clusters
# and curiously, four clusters is not in the output at all!
यदि आपका प्रश्न है how can I produce a dendrogram to visualize the results of my cluster analysis
, तो आपको इनसे शुरू करना चाहिए:
http://www.statmethods.net/advstats/cluster.html
http://www.r-tutor.com/gpu-computing/clustering/hierarchical-cluster-ansterysis
http://gastonsanchez.wordpress.com/2012/10/03/7-ways-to-plot-dendrograms-in-r/ और यहाँ और अधिक विदेशी तरीकों के लिए देखें: http://cran.r-project.org/ वेब / विचारों / Cluster.html
कुछ उदाहरण निम्नलिखित हैं:
d_dist <- dist(as.matrix(d)) # find distance matrix
plot(hclust(d_dist)) # apply hirarchical clustering and plot
# a Bayesian clustering method, good for high-dimension data, more details:
# http://vahid.probstat.ca/paper/2012-bclust.pdf
install.packages("bclust")
library(bclust)
x <- as.matrix(d)
d.bclus <- bclust(x, transformed.par = c(0, -50, log(16), 0, 0, 0))
viplot(imp(d.bclus)$var); plot(d.bclus); ditplot(d.bclus)
dptplot(d.bclus, scale = 20, horizbar.plot = TRUE,varimp = imp(d.bclus)$var, horizbar.distance = 0, dendrogram.lwd = 2)
# I just include the dendrogram here
हाई-डायमेंशन डेटा के लिए भी pvclust
लाइब्रेरी है जो मल्टीस्केल बूटस्ट्रैप रिस्पॉन्सिंग के माध्यम से पदानुक्रमिक क्लस्टरिंग के लिए पी-वैल्यू की गणना करता है। यहाँ प्रलेखन से उदाहरण है (मेरे उदाहरण में इस तरह के कम आयामी डेटा पर काम नहीं):
library(pvclust)
library(MASS)
data(Boston)
boston.pv <- pvclust(Boston)
plot(boston.pv)
क्या उसकी कोई मदद करता है?
fpc
पैकेज में उपलब्ध DBSCAN क्लस्टरिंग एल्गोरिदम की कोशिश कर सकते हैं । यह सच है, आपको फिर दो पैरामीटर सेट करने होंगे ... लेकिन मैंने पाया है किfpc::dbscan
तब एक अच्छी संख्या में क्लस्टर की अच्छी संख्या का निर्धारण स्वचालित रूप से होता है। इसके अलावा, यह वास्तव में एकल क्लस्टर का उत्पादन कर सकता है यदि डेटा आपको बताता है - @ बेन के उत्कृष्ट जवाबों में से कुछ तरीके आपको यह निर्धारित करने में मदद नहीं करेंगे कि क्या k = 1 वास्तव में सबसे अच्छा है।