将相关集合分组

时间:2015-05-24 15:44:01

标签: algorithm set

我有一组S由N组组成,每组包含2个或更多数字。 E.g:

S = {{1,2,6},{6,3,4,2},{6,2},{1,9,12},{7,8,12}}。所以,这里N = 5

问题是:确定应将哪些集合组合在一起,具体取决于它们具有多少相同的数字。例如,如果集合是较大集合的子集(例如,示例中的第二和第三集合),那么我们希望将它们组合在一起。但是,如果集合之间存在合理的相关性,我们也希望将它们组合在一起。

给出组的总数(P)。这些组的大小平均为N / P,但它们可能会有所不同。

我认为可能有一个标准算法来解决这个问题,任何人都可以帮我找到它吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这是一个未经考验的想法:

使用集合作为顶点并使用Jaccard index A B )/( A ∪< em> B )作为集合 A B 之间的边权重。具有不相交集(和Jaccard索引0)的顶点未连接。

然后使用聚类算法将图形划分为聚类,其中剪切权重较低的边缘,以便获得P disjoint subgraphsCorrelation clustering也可能是一种方法,虽然您无法控制群组数量,但您可以猜出阈值相似度。

答案 1 :(得分:0)

您正在寻找的算法名为k-means。它是一种迭代算法,将N个点收敛为k个预定义集合。如果设置迭代次数的阈值,则可以提前停止收敛。在任何情况下,当状态(p-1)产生相同的当前状态(p)时它会停止。

在您的情况下,您有k = P个预定义点(a.k.a. centroids)。数据集中的每个N点都是一个集合。要将点放在一个簇中,k-means需要相似性度量。这意味着你必须提供一个函数,给定数据库中的两点,告诉它们有多相似。

正如@MOehm所指出的,Jaccard指数是评估集合之间相似性的一个很好的指标。通常,只要您决定使用哪个相似性度量标准,任何允许用于设置最终聚类数量的聚类算法都是一种解决方案。