如何找到同一数据集的两个(或更多)聚类之间的交集

How to find intersection between two (or more) clusterings of the same dataset

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

有没有办法找到这两个聚类之间的交叉点?也就是说,第三个聚类 C 考虑 (x_i, x_j) 属于同一个集群当且仅当 (x_i, x_j) 根据 C'[=31 属于同一个集群=] 和 C''。 (如果是,它的复杂性是多少?)

换句话说:C(x_i) = C(x_j) 当且仅当 [C'(x_i) = C'(x_j) 和 C' '(x_i) = C''(x_j)]

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

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

中完成

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

图形的连通分量是您的最终聚类。

令 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 个簇,但有些簇可能是空的。