K 均值聚类未找到数据中的所有聚类

K-means clustering doesn't find all clusters in data

我使用的数据集如下图所示。如您所见,您会认为 k 均值聚类分析可以轻松找到这些聚类的中心。

然而,当我 运行 K 均值聚类分析和绘制中心时,我得到了这个。

我只使用基本的 kmeans 代码:

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

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

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

正如我在评论中提到的,使用 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")

这个数据集用DBSCAN聚类可能会好很多。

选择小于聚类距离的 epsilon(例如 10),然后 Minpts 应该无关紧要,例如 minpts=4