K-means聚类无法找到数据中的所有聚类

时间:2017-12-06 17:52:23

标签: r cluster-analysis k-means

我正在使用的数据集如下所示。可以看出,你会认为k-means聚类分析很容易找到这些聚类的中心。

Initial Data

然而,当我运行K-means聚类分析并绘制中心时,我得到了这个。

K-means Cluster Centers

我只使用基本的kmeans代码:

cluster <- kmeans(mydata,90)
cluster$centers

3 个答案:

答案 0 :(得分:2)

关于kmeans的一个鲜为人知的事实是,要获得可靠的结果,您需要使用许多随机初始化重复运行算法。我通常使用kmeans(, nstart = 1000)

理论上,kmeans++算法不会受到初始化问题的影响,但我经常发现具有许多随机重启的kmeans的性能优于kmeans++。不过,您可能希望使用kmeans++ R包尝试flexclust

答案 1 :(得分:1)

正如我在评论中提到的,使用hclust()查找中心可能是一种可行的方法。

enter image description here

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