如何合并不同聚类方法的聚类结果?
How to merge clustering results for different clustering approaches?
问题:在我看来,聚类方法c()
的一个基本属性是我们是否可以合并结果c(A)
和 c(B)
通过两个聚类的某些函数 f()
以某种方式我们不必再次应用完整的聚类 c(A+B)
而是执行 f(c(A),c(B))
并且仍然以同样的结果:
c(A+B) == f(c(A),c(B))
我想有些c()
有这个属性的必要条件是确定性,也就是它内部处理的顺序与结果无关。但是,这可能还不够。
如果能有一些参考,在哪里查找哪些集群方法支持这个,以及在各自的情况下什么是好的 f()
,那将是非常好的。
示例: 目前我正在考虑 DBSCAN,如果我允许边界点同时属于多个集群(不连接它们),它应该是确定性的:
- 如果一个点在它的 eps 邻域中,则可以从另一个点到达
- 核心点是至少有 minPts 可达的点
- 一条边从每个核心点到所有可到达的点
- 从核心点进入edge的每个点都与后者在同一个簇中
如果您错过了噪声点,则假设每个核心节点都到达自身(自反性),然后我们将噪声点定义为大小为 1 的簇。边界点是非核心点。之后如果我们想要分区,我们可以将多个集群中的边界点随机分配给其中一个。我认为这与方法本身无关。
据推测,唯一有效的聚类是单链接层次聚类,因为从 A x A 和 B x B 中删除的边对于查找连接集的 MST 不是必需的。
精确到DBSCAN,你遇到的问题是核心点属性在你添加数据的时候会发生变化。所以 c(A+B) 可能有核心点,这些点在 A 或 B 中都不是核心。这可能导致集群合并。 f() 应该需要重新检查所有数据点,即重新运行 DBSCAN。虽然您可以利用子集的核心点必须是整个集合的核心,但您仍然需要找到邻居和缺失的核心点。
问题:在我看来,聚类方法c()
的一个基本属性是我们是否可以合并结果c(A)
和 c(B)
通过两个聚类的某些函数 f()
以某种方式我们不必再次应用完整的聚类 c(A+B)
而是执行 f(c(A),c(B))
并且仍然以同样的结果:
c(A+B) == f(c(A),c(B))
我想有些c()
有这个属性的必要条件是确定性,也就是它内部处理的顺序与结果无关。但是,这可能还不够。
如果能有一些参考,在哪里查找哪些集群方法支持这个,以及在各自的情况下什么是好的 f()
,那将是非常好的。
示例: 目前我正在考虑 DBSCAN,如果我允许边界点同时属于多个集群(不连接它们),它应该是确定性的:
- 如果一个点在它的 eps 邻域中,则可以从另一个点到达
- 核心点是至少有 minPts 可达的点
- 一条边从每个核心点到所有可到达的点
- 从核心点进入edge的每个点都与后者在同一个簇中
如果您错过了噪声点,则假设每个核心节点都到达自身(自反性),然后我们将噪声点定义为大小为 1 的簇。边界点是非核心点。之后如果我们想要分区,我们可以将多个集群中的边界点随机分配给其中一个。我认为这与方法本身无关。
据推测,唯一有效的聚类是单链接层次聚类,因为从 A x A 和 B x B 中删除的边对于查找连接集的 MST 不是必需的。
精确到DBSCAN,你遇到的问题是核心点属性在你添加数据的时候会发生变化。所以 c(A+B) 可能有核心点,这些点在 A 或 B 中都不是核心。这可能导致集群合并。 f() 应该需要重新检查所有数据点,即重新运行 DBSCAN。虽然您可以利用子集的核心点必须是整个集合的核心,但您仍然需要找到邻居和缺失的核心点。