আর এ ক্লাস্টার বিশ্লেষণ: ক্লাস্টারের অনুকূল সংখ্যা নির্ধারণ করুন


428

আর-এ নবজাতক হওয়ার কারণে, কে-মানে বিশ্লেষণ করতে কীভাবে সেরা সংখ্যক ক্লাস্টার বেছে নেওয়া যায় তা আমি খুব নিশ্চিত নই। নীচের ডেটার একটি উপসেট প্লট করার পরে, কতগুলি ক্লাস্টার উপযুক্ত হবে? আমি কীভাবে ক্লাস্টার ডেন্ড্রো বিশ্লেষণ করতে পারি?

n = 1000
kk = 10    
x1 = runif(kk)
y1 = runif(kk)
z1 = runif(kk)    
x4 = sample(x1,length(x1))
y4 = sample(y1,length(y1)) 
randObs <- function()
{
  ix = sample( 1:length(x4), 1 )
  iy = sample( 1:length(y4), 1 )
  rx = rnorm( 1, x4[ix], runif(1)/8 )
  ry = rnorm( 1, y4[ix], runif(1)/8 )
  return( c(rx,ry) )
}  
x = c()
y = c()
for ( k in 1:n )
{
  rPair  =  randObs()
  x  =  c( x, rPair[1] )
  y  =  c( y, rPair[2] )
}
z <- rnorm(n)
d <- data.frame( x, y, z )

4
আপনি যদি পুরোপুরি কুমেনের সাথে আবদ্ধ না হন তবে আপনি প্যাকেজে উপলব্ধ ডিবিএসসিএন ক্লাস্টারিং অ্যালগরিদম চেষ্টা করতে পারেন fpc। এটি সত্য, এরপরে আপনাকে দুটি পরামিতি নির্ধারণ করতে হবে ... তবে আমি খুঁজে পেয়েছি যে fpc::dbscanভাল সংখ্যক ক্লাস্টারগুলি স্বয়ংক্রিয়ভাবে নির্ধারণ করার জন্য খুব ভাল কাজ করে। এছাড়াও এটি আসলে একটি একক ক্লাস্টার আউটপুট দিতে পারে যদি ডেটা আপনাকে যা বলে তা - @ বেনের উত্তরের উত্তরের কয়েকটি পদ্ধতি আপনাকে কে = 1 আসলে সেরা কিনা তা নির্ধারণ করতে সহায়তা করবে না।
স্টিফান কোলাসা

এছাড়াও দেখুন stats.stackexchange.com/q/11691/478
রিচি কটন

উত্তর:


1020

যদি আপনার প্রশ্ন হয় 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)

এখানে চিত্র বর্ণনা লিখুন

যে কেউ সাহায্য করে?


শেষ ডেনডোগ্রামের জন্য (এউ / বিপি সহ ক্লাস্টার ডেন্ডোগ্রাম) কখনও কখনও তুলনামূলকভাবে উচ্চ পি-ভ্যালু সহ গ্রুপগুলির চারপাশে আয়তক্ষেত্র আঁকা সুবিধাজনক: পিভিরেট (ফিট, আলফা = 0.95)
ইগোর এলবার্ট

আমি ঠিক এটিই খুঁজছিলাম। আমি আর-তে নতুন এবং এটি খুঁজে পেতে আমাকে খুব বেশি সময় লাগত। এই জাতীয় বিস্তারিত উত্তর দেওয়ার জন্য @ বেনকে ধন্যবাদ। আপনি কি দয়া করে আমাকে গাইড করতে পারেন যে আমি এই পদ্ধতির প্রতিটিটির পিছনে যুক্তিটি কোথায় খুঁজে পেতে পারি যেমন ক্লাস্টারের অনুকূল সংখ্যা নির্ধারণ করতে তারা কী মেট্রিক বা মাপদণ্ড ব্যবহার করছেন বা তাদের প্রত্যেকে একে অপরের থেকে কীভাবে আলাদা। আমার বস আমাকে তা বলতে চান, তাই কোনটি পদ্ধতি ব্যবহার করবেন তা আমরা সিদ্ধান্ত নিতে পারি। আগাম ধন্যবাদ.
নাসিয়া জাফরি

1
@ আলেকসান্দ্র ব্লেক আপনি যে কোনও গ্রাফিকাল পদ্ধতিকে বিশ্লেষণাত্মক করে তোলার চেষ্টা করতে পারেন। উদাহরণস্বরূপ, আমি "কনুই" পদ্ধতিটি ব্যবহার করি (উত্তরে প্রথমে উল্লিখিত), তবে এটি বিশ্লেষণ করে অনুসন্ধান করার চেষ্টা করুন। কনুই পয়েন্ট সর্বাধিক বক্রতা সহ বিন্দু হতে পারে। পৃথক তথ্যের জন্য এটি সর্বাধিক দ্বিতীয় ক্রম কেন্দ্রীয় পার্থক্য সহ বিন্দু (ক্রমাগত ডেটার জন্য সর্বাধিক সেকেন্ড অর্ডার ডেরিভেটিভ) alog দেখুন stackoverflow.com/a/4473065/1075993 এবং stackoverflow.com/q/2018178/1075993 । আমার ধারণা অন্যান্য গ্রাফিকাল পদ্ধতিগুলিও বিশ্লেষণী রূপান্তরিত হতে পারে।
আন্দ্রে স্যাপেইগিন

1
@ আন্ড্রেসেপেইগিন: আমি পারলাম, কিন্তু: ১) সত্যি বলতে গেলে, আমি এটিকে একটি মার্জিত সমাধান হিসাবে বিবেচনা করি না (আইএমএইচও, বেশিরভাগ ক্ষেত্রে, ভিজ্যুয়াল পদ্ধতিগুলি ভিজ্যুয়াল থাকতে হবে, তবে বিশ্লেষণাত্মকগুলি বিশ্লেষণমূলক থাকতে হবে); 2) আমি এক বা একাধিক Rপ্যাকেজ ব্যবহার করে এটির বিশ্লেষণাত্মক সমাধান বের করেছি (এটি আমার গিটহাবের উপরে রয়েছে - আপনাকে একবার দেখার জন্য স্বাগত জানাই); ৩) আমার সমাধানটি বেশ ভালভাবে কাজ করছে বলে মনে হচ্ছে, আরও কিছুক্ষণ হয়ে গেছে এবং আমি ইতিমধ্যে আমার গবেষণামূলক সফ্টওয়্যার, গবেষণামূলক প্রতিবেদন (থিসিস) চূড়ান্ত করেছি এবং বর্তমানে আমি প্রতিরক্ষার জন্য প্রস্তুত করছি :-)। নির্বিশেষে, আমি আপনার মন্তব্য এবং লিঙ্কগুলি অনেক প্রশংসা করি। শুভকামনা!
আলেকসান্দ্র ব্লেক

1
আমার বর্তমান ক্লাস্টারিং ডেটাসেটে ২.২ মিলিয়ন সারি রয়েছে। এই আর প্যাকেজগুলির কোনওটিই এতে কাজ করে না, আমি আশা করি। তারা কেবল আমার কম্পিউটারটি পপ করে এবং তারপরে এটি আমার অভিজ্ঞতা থেকে আসে। তবে দেখে মনে হচ্ছে যে লেখক তার স্টাফটি ছোট তথ্য এবং সাধারণ ক্ষেত্রে সফ্টওয়্যার ক্ষমতা বিবেচনা না করেই জানে knows লেখকের সুস্পষ্ট ভাল কাজের কারণে কোনও পয়েন্ট কাটা হয়নি। আপনি সমস্ত দয়া করে জেনে থাকুন যে প্লেইন পুরাতন আর ২.২ মিলিয়ন কাতারে ভয়ঙ্কর - আপনি যদি আমার উপর বিশ্বাস না করেন তবে নিজে চেষ্টা করে দেখুন। H2O সাহায্য করে তবে সুখের একটি ছোট প্রাচীরের বাগানের মধ্যে সীমাবদ্ধ।
জেফ্রি অ্যান্ডারসন

21

এরকম বিস্তৃত উত্তরও কিছু যোগ করা কঠিন। যদিও আমি মনে করি আমাদের identifyএখানে উল্লেখ করা উচিত , বিশেষত কারণ @ বেন অনেকগুলি ডেনড্রোগ্রাম উদাহরণ দেখায়।

d_dist <- dist(as.matrix(d))   # find distance matrix 
plot(hclust(d_dist)) 
clusters <- identify(hclust(d_dist))

identifyআপনাকে ইন্টারঅ্যাক্টিভভাবে একটি ডেনড্রগ্রাম থেকে ক্লাস্টার বেছে নিতে দেয় এবং আপনার পছন্দগুলিকে একটি তালিকায় সঞ্চয় করতে দেয়। ইন্টারেক্টিভ মোডটি ছেড়ে আর কনসোলে ফিরে আসার জন্য এসএসকে হিট করুন। দ্রষ্টব্য, যে তালিকায় সূচকগুলি রয়েছে, রউন নামগুলি নয় (বিপরীতে cutree)।


10

ক্লাস্টারিং পদ্ধতিতে অনুকূল কে-ক্লাস্টার নির্ধারণের জন্য। Elbowটাইমসামিং এড়াতে আমি সাধারণত প্যারালাল প্রসেসিংয়ের সাথে মেথড ব্যবহার করি । এই কোডটি এর মতো নমুনা দিতে পারে:

কনুই পদ্ধতি

elbow.k <- function(mydata){
dist.obj <- dist(mydata)
hclust.obj <- hclust(dist.obj)
css.obj <- css.hclust(dist.obj,hclust.obj)
elbow.obj <- elbow.batch(css.obj)
k <- elbow.obj$k
return(k)
}

কনুই সমান্তরাল চলমান

no_cores <- detectCores()
    cl<-makeCluster(no_cores)
    clusterEvalQ(cl, library(GMD))
    clusterExport(cl, list("data.clustering", "data.convert", "elbow.k", "clustering.kmeans"))
 start.time <- Sys.time()
 elbow.k.handle(data.clustering))
 k.clusters <- parSapply(cl, 1, function(x) elbow.k(data.clustering))
    end.time <- Sys.time()
    cat('Time to find k using Elbow method is',(end.time - start.time),'seconds with k value:', k.clusters)

এটি ভালই কাজ করে.


2
কনুই এবং সিএসএস ফাংশনগুলি জিএমডি প্যাকেজ থেকে আসছে: cran.r-project.org/web/packages/GMD/GMD.pdf
রোহন

6

বেন থেকে দুর্দান্ত উত্তর। তবে আমি আশ্চর্য হয়েছি যে অ্যাফিনিটি প্রোপাগেশন (এপি) পদ্ধতিটি এখানে কেবল-কে-পদ্ধতি পদ্ধতির জন্য ক্লাস্টারের সংখ্যা সন্ধান করার জন্য প্রস্তাবিত হয়েছে, যেখানে সাধারণ এপি ডেটা গুছিয়ে রাখার জন্য আরও ভাল কাজ করে। এখানে বিজ্ঞানের এই পদ্ধতিটিকে সমর্থনকারী বৈজ্ঞানিক কাগজটি দেখুন:

ফ্রে, ব্রেন্ডন জে এবং ডেলবার্ট ডিউক। "ডেটা পয়েন্টগুলির মধ্যে বার্তা প্রেরণে ক্লাস্টারিং।" বিজ্ঞান 315.5814 (2007): 972-976।

সুতরাং আপনি যদি কে-মানে সম্পর্কে পক্ষপাতদুষ্ট না হন তবে আমি সরাসরি এপি ব্যবহার করার পরামর্শ দিচ্ছি, যা ক্লাস্টারের সংখ্যা না জেনে ডেটা ক্লাস্টার করবে:

library(apcluster)
apclus = apcluster(negDistMat(r=2), data)
show(apclus)

যদি নেতিবাচক ইউক্লিডিয়ান দূরত্বগুলি যথাযথ না হয় তবে আপনি একই প্যাকেজে প্রদত্ত আরেকটি মিলের ব্যবস্থা ব্যবহার করতে পারেন। উদাহরণস্বরূপ, স্পিয়ারম্যান পারস্পরিক সম্পর্কের উপর ভিত্তি করে মিলের জন্য, আপনার যা প্রয়োজন তা হল:

sim = corSimMat(data, method="spearman")
apclus = apcluster(s=sim)

দয়া করে নোট করুন যে এপি প্যাকেজের মিলগুলির জন্য functions ফাংশনগুলি কেবল সরলতার জন্য সরবরাহ করা হয়েছে। প্রকৃতপক্ষে, আর এ এপ্লাক্সটার () ফাংশনটি কোনও মেল্রিক্সের সাথে সম্পর্কিত হতে পারে accept CorSimMat () এর সাথে আগের একই জিনিস এটি দিয়ে করা যেতে পারে:

sim = cor(data, method="spearman")

অথবা

sim = cor(t(data), method="spearman")

আপনার ম্যাট্রিক্স (সারি বা কোলস) এ আপনি কী ক্লাস্টার করতে চান তার উপর নির্ভরশীল।


6

এই পদ্ধতিগুলি দুর্দান্ত তবে অনেক বেশি বড় ডেটা সেটের জন্য যখন কে অনুসন্ধান করার চেষ্টা করা হয় তখন এগুলি আর-এ ধীরে ধীরে ক্রেজি হতে পারে

আমি খুঁজে পেয়েছি একটি ভাল সমাধান হ'ল "আরউইকা" প্যাকেজটি, যার এক্স-ম্যানস অ্যালগরিদমের কার্যকর বাস্তবায়ন রয়েছে - কে-মিনের একটি বর্ধিত সংস্করণ যা আরও ভাল স্কেল করে এবং আপনার জন্য ক্লাস্টারের সর্বোত্তম সংখ্যা নির্ধারণ করবে।

প্রথমে আপনি তা নিশ্চিত করতে চাইবেন যে ওয়েকা আপনার সিস্টেমে ইনস্টল করা আছে এবং ওয়েকার প্যাকেজ ম্যানেজার সরঞ্জামের মাধ্যমে এক্সমিন ইনস্টল করা আছে।

library(RWeka)

# Print a list of available options for the X-Means algorithm
WOW("XMeans")

# Create a Weka_control object which will specify our parameters
weka_ctrl <- Weka_control(
    I = 1000,                          # max no. of overall iterations
    M = 1000,                          # max no. of iterations in the kMeans loop
    L = 20,                            # min no. of clusters
    H = 150,                           # max no. of clusters
    D = "weka.core.EuclideanDistance", # distance metric Euclidean
    C = 0.4,                           # cutoff factor ???
    S = 12                             # random number seed (for reproducibility)
)

# Run the algorithm on your data, d
x_means <- XMeans(d, control = weka_ctrl)

# Assign cluster IDs to original data set
d$xmeans.cluster <- x_means$class_ids

6

একটি সহজ সমাধান হ'ল গ্রন্থাগার factoextra। আপনি ক্লাস্টারিং পদ্ধতি এবং সেরা সংখ্যার গ্রুপ গণনা করার পদ্ধতি পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, যদি আপনি কোনও কে-অর্থের জন্য সেরা সংখ্যক ক্লাস্টার জানতে চান:

ডেটা: এমটিকার্স

library(factoextra)   
fviz_nbclust(mtcars, kmeans, method = "wss") +
      geom_vline(xintercept = 3, linetype = 2)+
      labs(subtitle = "Elbow method")

অবশেষে, আমরা এর মতো একটি গ্রাফ পাই:

এখানে চিত্র বর্ণনা লিখুন


2

উত্তরগুলি দুর্দান্ত। আপনি যদি অন্য একটি ক্লাস্টারিং পদ্ধতিতে চান্স চান তা চাইলে আপনি শ্রেণিবদ্ধ ক্লাস্টারিং ব্যবহার করতে পারেন এবং দেখুন কীভাবে ডেটা বিভক্ত হচ্ছে।

> set.seed(2)
> x=matrix(rnorm(50*2), ncol=2)
> hc.complete = hclust(dist(x), method="complete")
> plot(hc.complete)

এখানে চিত্র বর্ণনা লিখুন

আপনার কতগুলি ক্লাসের প্রয়োজন তা নির্ভর করে আপনি আপনার ডেনড্রগ্রাম হিসাবে কেটে ফেলতে পারেন;

> cutree(hc.complete,k = 2)
 [1] 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1
[26] 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 1 1 1 1 2

আপনি টাইপ ?cutreeকরলে সংজ্ঞা দেখতে পাবেন। যদি আপনার ডেটা সেটটিতে তিনটি শ্রেণি থাকে তবে তা সহজ হবে cutree(hc.complete, k = 3)। সমতুল্য জন্য cutree(hc.complete,k = 2)হয় cutree(hc.complete,h = 4.9)


আমি ওয়ার্ডসকে সম্পূর্ণ পছন্দ করি।
ক্রিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.