我正在使用的数据集如下所示。可以看出,你会认为k-means聚类分析很容易找到这些聚类的中心。
然而,当我运行K-means聚类分析并绘制中心时,我得到了这个。
我只使用基本的kmeans代码:
cluster <- kmeans(mydata,90)
cluster$centers
答案 0 :(得分:2)
关于kmeans的一个鲜为人知的事实是,要获得可靠的结果,您需要使用许多随机初始化重复运行算法。我通常使用kmeans(, nstart = 1000)
。
理论上,kmeans++
算法不会受到初始化问题的影响,但我经常发现具有许多随机重启的kmeans
的性能优于kmeans++
。不过,您可能希望使用kmeans++
R包尝试flexclust
。
答案 1 :(得分:1)
正如我在评论中提到的,使用hclust()
查找中心可能是一种可行的方法。
set.seed(1)
l <- 1e4
v1 <- sample(1:10, l, replace=TRUE) + rnorm(l, 0, 0.05)
v2 <- sample(1:13, l, replace=TRUE) + rnorm(l, 0, 0.05)
dtf <- data.frame(v1, v2)
par(mar=c(2, 2, 1, 1))
plot(dtf, pch=16, cex=0.2, col="#00000044")
km <- kmeans(dtf, 10*13)
points(km$centers, cex=2, lwd=0.5, col="red")
hc <- hclust(dist(dtf))
hc <- cutree(hc, 10*13)
hcent <- aggregate(dtf, list(hc), mean)[, -1]
hckm <- kmeans(dtf, hcent)
points(hckm$centers, cex=3, lwd=0.5, col="blue")
答案 2 :(得分:0)
这个数据集可能会更好地被DBSCAN聚集。
选择epsilon小于簇的距离(例如10),Minpts应该不重要,例如minpts = 4