Merge 如何合并不同聚类方法的聚类结果?

Merge 如何合并不同聚类方法的聚类结果?,merge,cluster-analysis,dbscan,deterministic,Merge,Cluster Analysis,Dbscan,Deterministic,问题:在我看来,聚类方法c()的一个基本属性是我们是否可以通过两个聚类的某个函数f()组合结果c(a)和c(B),而不必应用完整的聚类c(a+B)再次执行,但改为执行f(c(A),c(B))并仍然得到相同的结果: c(A+B) == f(c(A),c(B)) 我假设某些c()具有此属性的一个必要条件是它是确定的,即其内部处理的顺序与结果无关。然而,这可能还不够 如果有一些参考资料,可以在哪里查找哪些集群方法支持这一点,以及一个好的f() 示例:目前我正在考虑DBSCAN,如果我允许边界点同时

问题:在我看来,聚类方法
c()
的一个基本属性是我们是否可以通过两个聚类的某个函数
f()
组合结果
c(a)
c(B)
,而不必应用完整的聚类
c(a+B)
再次执行,但改为执行
f(c(A),c(B))
并仍然得到相同的结果:

c(A+B) == f(c(A),c(B))
我假设某些
c()
具有此属性的一个必要条件是它是确定的,即其内部处理的顺序与结果无关。然而,这可能还不够

如果有一些参考资料,可以在哪里查找哪些集群方法支持这一点,以及一个好的
f()


示例:目前我正在考虑DBSCAN,如果我允许边界点同时属于多个集群(不连接它们),那么DBSCAN应该是确定性的:

  • 如果一个点位于其eps邻域中,则该点可以从另一个点到达
  • 核心点是至少可以到达MINPT的点
  • 一条边从每个核心点延伸到所有可以到达的点
  • 从核心点引入边的每个点都与核心点位于同一簇中

  • 如果忽略了噪波点,则假设每个核心节点都达到自身(自反性),然后我们将噪波点定义为大小为1的簇。边界点是非核心点。之后,如果我们想要分区,我们可以将多个集群中的边界点随机分配给其中一个集群。我不认为这与方法本身是相关的。
    对于DBSCAN,您有一个问题,即添加数据时核心点属性可能会发生更改。所以c(A+B)的核心点可能不是A或B中的核心点。这可能会导致集群合并。f()可能需要重新检查所有数据点,即重新运行DBSCAN。虽然您可以利用子集的核心点必须是整个集合的核心这一点,但您仍然需要找到邻居和缺少的核心点。

    据推测,唯一有效的聚类是单链接层次聚类,因为从A x A和B x B中删除的边对于查找联接集的MST不是必需的


    对于DBSCAN,您有一个问题,即添加数据时核心点属性可能会发生更改。所以c(A+B)的核心点可能不是A或B中的核心点。这可能会导致集群合并。f()可能需要重新检查所有数据点,即重新运行DBSCAN。虽然您可以利用子集的核心点必须是整个集合的核心这一点,但仍然需要找到邻居和缺少的核心点。

    是的,我想我也有类似的想法,尤其是人们很容易忘记核心点属性可以更改。我想如果一个人为分布式计算创建分区,他会这样做,这样就不会发生这种情况(尽管还没有读过相关文献)。对于我研究过的相似性计算的案例,eps邻域是最昂贵的部分(我认为即使在复杂性方面),因此我考虑更新相似性矩阵,并将计算出的可达性传递闭包添加到“边缘”矩阵(收敛更快),然而,这并不是内存有效的…有基于会议结果的DBSCAN并行版本。但是它们没有正式使用c(A)和c(B),而是不对称的。我必须问的问题是:给定两个样本x,y其中x=y,x在A中,y在B中,会发生吗?我想如果分区是有意的,通常不会发生这种情况,但我必须检查不同的方法。这个问题通常不适用于方法,因为它们不会对数据进行简单的分区。这里要做的显而易见的事情是对查询使用不相交的分区a、b,但对查询结果使用整个数据。然后保证核心属性是正确的,并且只计算一次。然后,您可以组装正确的DBSCAN结果。但是它是f(cmodified(a,everything),cmodified(b,everything))而不是f(c(a),c(b))。是的,我想我有类似的想法,特别是人们很容易忘记核心点属性可以改变。我想如果一个人为分布式计算创建分区,他会这样做,这样就不会发生这种情况(尽管还没有读过相关文献)。对于我研究过的相似性计算的案例,eps邻域是最昂贵的部分(我认为即使在复杂性方面),因此我考虑更新相似性矩阵,并将计算出的可达性传递闭包添加到“边缘”矩阵(收敛更快),然而,这并不是内存有效的…有基于会议结果的DBSCAN并行版本。但是它们没有正式使用c(A)和c(B),而是不对称的。我必须问的问题是:给定两个样本x,y其中x=y,x在A中,y在B中,会发生吗?我想如果分区是有意的,通常不会发生这种情况,但我必须检查不同的方法。这个问题通常不适用于方法,因为它们不会对数据进行简单的分区。这里要做的显而易见的事情是对查询使用不相交的分区a、b,但对查询结果使用整个数据。然后保证核心属性是正确的,并且只计算一次。然后,您可以组装正确的DBSCAN结果。但它是f(c修饰的(a,一切),c修饰的(b,一切))而不是f(c(a),c(b))。