যদি আপনার প্রশ্ন হয় how can I determine how many clusters are appropriate for a kmeans analysis of my data?, তবে এখানে কিছু বিকল্প রয়েছে। Wikipedia নিবন্ধটি ক্লাস্টার সংখ্যা নির্ধারণের উপর এই পদ্ধতি কিছু একটা ভাল পর্যালোচনা আছে।
প্রথমত, কিছু পুনরুত্পাদনযোগ্য ডেটা (Q এর ডেটাগুলি ... আমার কাছে অস্পষ্ট):
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এফপিসি প্যাকেজটিতে ফাংশনটি ব্যবহার করে ক্লাস্টারের সংখ্যা নির্ধারণের জন্য মিডোয়েডগুলির চারপাশে বিভাজন করতে পারেন ।
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
তিন । ক্যালিনস্কি মাপদণ্ড: কতগুলি ক্লাস্টার ডেটা উপযোগী তা নির্ণয়ের জন্য আরেকটি পদ্ধতি। এই ক্ষেত্রে আমরা 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/sज्ञान.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-statics.com/2010/06/clustergram- ভিজুয়ালাইজেশন- এবং- ডায়াগনস্টিকস- for- ক্লাসটার- অ্যানালাইসিস-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-analysis
http : //gastonsanchez..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। এটি সত্য, এরপরে আপনাকে দুটি পরামিতি নির্ধারণ করতে হবে ... তবে আমি খুঁজে পেয়েছি যেfpc::dbscanভাল সংখ্যক ক্লাস্টারগুলি স্বয়ংক্রিয়ভাবে নির্ধারণ করার জন্য খুব ভাল কাজ করে। এছাড়াও এটি আসলে একটি একক ক্লাস্টার আউটপুট দিতে পারে যদি ডেটা আপনাকে যা বলে তা - @ বেনের উত্তরের উত্তরের কয়েকটি পদ্ধতি আপনাকে কে = 1 আসলে সেরা কিনা তা নির্ধারণ করতে সহায়তা করবে না।