是否有一种聚类方法可以让我指出每个聚类所需的点数?

机器算法验证 Python 聚类
2022-04-06 08:08:32

我研究了各种聚类算法,并意识到预先指定确切的聚类大小会违背聚类的目的——识别数据中的自然模式。预先施加尺寸限制可能不是任何人都想做的事情。

但是,我确实需要一种方法,该方法允许我指定每个集群允许的确切点数。是否有这样的算法可用,或者不幸的是我必须尝试编写自己的算法?

2个回答

这里有些具体,严格来说,问题不是关于聚类(即发现底层数据结构),而是针对具有一般相似性约束的分区,在这个范围内,这个任务通常被称为平衡聚​​类。最后在术语方面帮助一个前进:我们关心“集群基数”,即集群中元素的数量。

一个近似的(几乎)开箱即用的解决方案可以使用k- 表示稍作修改;ELKI数据挖掘软件有一个关于如何执行相同大小的很好的教程k- 表示变体,它包含 Java 中的示例。无需赘述,我们初始化我们的聚类k- 表示变体k=np均值/质心,p是预期的集群基数。然后分配到p每个集群的元素并向前迭代此过程。这本质上是一个与“香草”中所做的相同的EM 程序k-意味着但在E步骤(期望 - 标签分配)。该链接非常小心地展示了整个过程。

综上所述,对问题的正式处理并非易事,关于该主题的技术工作有些稀疏。基本上,我们需要将这个问题重新表述为具有某些离散约束的优化任务。对于初学者,我建议您查看:Malinen 和 Fränti 的Balanced K-Means for Clustering (2014) 以及 Lin 等人的Balanced Clustering: A Uniform Model and Fast Algorithm (2019)。不幸的是,我没有在这些论文中看到任何精选的 Python 实现。您可能想直接与作者联系。

@Eyal Shulman 的python 解决方案提供了一种 K-means 方法,允许定义集群基数。