【问题标题】:How to find intersection between two (or more) clusterings of the same dataset如何找到同一数据集的两个(或多个)聚类之间的交集
【发布时间】:2019-10-27 16:06:14
【问题描述】:

假设给定一个数据集 X = (x_1, ..., x_n),其中有 n 个维度实例 d,我进行聚类X 中的所有实例都使用两种不同的聚类算法。这将导致同一数据集的两个单独的聚类,C'C''

有没有办法找到这两个集群之间的交集?也就是说,第三个聚类 C 认为 (x_i, x_j) 属于同一个聚类 iff (x_i, x_j)根据C'C''属于同一个簇。 (如果是,它的复杂性是多少?)

换句话说:C(x_i) = C(x_j) iff [C'(x_i) = C'(x_j) and C''(x_i) = C''(x_j)]

而且,如果存在这样的方法,是否也扩展到要比较的聚类数大于两个的情况?

【问题讨论】:

  • 如何找到 C' 和 C'' 中的集群之间的映射关系,以便判断一个实例是否属于两个集群中的“相同”集群?
  • 您是否正在寻找一种算法来组合两个无监督聚类的结果?没有任何进一步的数据知识,比如形状?
  • @Pibben 我的意思是 C(x_i) = C(x_j) iff C'(x_i) = C'(x_j) 和 C''(x_i) = C''(x_j)。没有 C'(x_i) = C''(x_i) 这样的约束。
  • @Mobold 完全正确

标签: algorithm cluster-analysis


【解决方案1】:

设 C' 有 m 个簇,C'' 有 k 个簇。

然后将簇 i=C'(x) 和 j=C''(x) 中的点 x 现在放入簇 C(x)=i*k+j=C'(x)*k+C ''(x)。

可以把它想象成一个 m*k 的聚类矩阵,每个聚类决定他的行或列。显然,这可以扩展到张量。

事实上,ARI 和 NMI 等许多评估措施都是这样工作的,只是它们只计算交叉点的大小。

您最多可以获得 m*k 个集群,但有些可能是空的。

【讨论】:

    【解决方案2】:

    你可以做的是创建一个图,其中实例是节点,如果C'(x_i) = C'(x_j) and C''(x_i) = C''(x_j),节点之间有边。这可以在 O(n^2) 内完成。

    然后你可以找到图表的connected components。这也是 O(n^2)。

    图的连接组件是您的最终集群。

    【讨论】:

    • 但也可以在 O(n) 中完成。此外,连接的组件会给出错误的结果。你的意思是派系。
    • 您能否简要说明一下为什么连接的组件会给出错误的结果?
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2016-01-20
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多