模糊 K 均值 - 簇大小

机器算法验证 r 聚类 k-均值 模糊
2022-04-03 14:12:58

我正在尝试使用 cmeans function (R) 对数据集进行模糊 k-means 聚类。我面临的问题是集群的大小不像我希望的那样。这是通过计算观测值“最接近”的集群来完成的。

cl$size
 [1]   108    31   192    51   722 18460    67  1584   419 17270

在这里,我们看到对于 10 个集群,我们有两个巨大的集群和许多非常小的集群。这是否意味着两个集群在任何方面都是最优的?如果我做常规的 K-means 10 段看起来非常好,大小合适,它们的解释很有意义,但我想正确地尝试模糊。我刚刚开始探索这种模糊聚类,因此非常欢迎任何帮助和指示。

2个回答

K-means 和模糊 k-means(通过您的“赢家通吃”策略强调)假设集群具有相同的空间扩展。

之间几乎中间来最好地解释如果它稍微接近​​ ,它将进入集群,如果它稍微接近,它将即 k-means 假设在两点之间的平均值(即 Voronoi 单元边界)正交的超平面上拆分数据集是正确的拆分,并且根本没有考虑到集群可能具有不同的空间扩展。ocicjciicjj

具有高斯混合的EM 聚类(维基百科)本质上是模糊 k 均值的扩展,它 a)不假设所有维度都同等重要,并且 b)簇可能具有不同的空间扩展。您可以通过删除高斯混合(或至少是协方差)来简化它,并保持集群权重。这个权重基本上会给出相对集群大小。

或者您可能想研究更高级的方法来处理任意形状的集群,例如DBSCAN (Wikipedia)OPTICS (Wikipedia)

为什么不使用集群包中的 fanny()?您可以在帮助的详细信息部分找到算法的详细信息。

这是来自 ?fanny 的示例代码

## generate 10+15 objects in two clusters, plus 3 objects lying
## between those clusters.
x <- rbind(cbind(rnorm(10, 0, 0.5), rnorm(10, 0, 0.5)),
           cbind(rnorm(15, 5, 0.5), rnorm(15, 5, 0.5)),
           cbind(rnorm( 3,3.2,0.5), rnorm( 3,3.2,0.5)))
fannyx <- fanny(x, 2)
## Note that observations 26:28 are "fuzzy" (closer to # 2):
fannyx
summary(fannyx)
plot(fannyx)

(fan.x.15 <- fanny(x, 2, memb.exp = 1.5)) # 'crispier' for obs. 26:28
(fanny(x, 2, memb.exp = 3))               # more fuzzy in general

data(ruspini)
f4 <- fanny(ruspini, 4)
stopifnot(rle(f4$clustering)$lengths == c(20,23,17,15))
plot(f4, which = 1)
## Plot similar to Figure 6 in Stryuf et al (1996)
plot(fanny(ruspini, 5))