我正在为 k-means 聚类编写代码。我有大约 100000 个大小为 128x1 的向量(SIFT 描述符)。我正在尝试不同的初始化方法,例如 Forgy 和 Random Partition。如果假设没有向量被分类到一个簇中(在其中一次迭代中)怎么办?如何计算该集群的质心?
K-Means 聚类 - 如果一个聚类有 0 个元素怎么办?
数据挖掘
聚类
k-均值
2021-09-26 22:56:01
2个回答
这主要是一个非常糟糕的初始化问题(随机向量生成和随机标记是愚蠢的,不要使用它 - 使用采样选择 k 点或 k-means++)以及 k-means 无法正常工作的数据一点也不。所以如果发生这种情况,你知道结果不会好!
无论哪种方式,标准且直接的解决方案都很简单:如果集群为空,则使用先前的平均值。以后可以再次分配积分。如果没有,那么集群是空的。这里没有惊喜,没有无限循环,收敛问题等。
如果你得到一个空簇,它就没有质心。您可以简单地忽略此集群(k=k-1
为下一次迭代设置),或从新的初始化重复运行 k-means。如果您必须拥有特定数量的 K 个集群,您还可以选择将随机数据点放入该集群并继续算法。
如果它继续发生,则很有可能您的 K 参数太高。您应该遍历 k 的几个不同值并选择最佳值。
以下是空集群可能发生的情况:
- 考虑以下具有 7 个数据点的示例。点的不同形状只是为了表明实际上有 2 个自然簇(但在运行算法之前我们不知道)。在这种情况下,我们选择
k = 3
.
- 三个随机聚类中心被初始化。在第一次迭代结束时,点 3、1、2 和 7 将位于一个集群中。4 和 5 将在另一个集群中。6 个将在最后一个集群中。注意这里 3 和 4 之间的距离大于 4 和 5 之间的距离,因此将 4 分配给由 5 表示的集群。在我们开始第二次迭代之前,我们更新集群中心,下图显示了中心和第一步结束时的集群。
- 现在,红色簇的簇中心由于 1、2 和 7 移近了点 4。而蓝色簇的簇中心由于点 4 而远离了 5。在下一次迭代中,点 4 将决定它更接近红色集群,点 5 将决定它更接近绿色集群。这将导致蓝色集群为空,如下所示。
图片取自以下链接:K-Means Empty Cluster Example
其它你可能感兴趣的问题