हां, आप एल्बो विधि का उपयोग करके क्लस्टर की सबसे अच्छी संख्या पा सकते हैं, लेकिन मैंने स्क्रिप्ट का उपयोग करके एल्बो ग्राफ से क्लस्टर के मूल्य को खोजने में परेशानी का सामना किया। आप कोहनी ग्राफ का निरीक्षण कर सकते हैं और कोहनी बिंदु को खुद पा सकते हैं, लेकिन यह स्क्रिप्ट से खोजने में बहुत काम था।
तो इसे खोजने के लिए एक और विकल्प सिल्हूट विधि का उपयोग करना है। आर में एल्बो विधि से सिल्हूट के परिणाम पूरी तरह से अनुपालन करते हैं।
यहाँ `मैंने क्या किया।
#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")
आशा करता हूँ की ये काम करेगा!!