群集算法和“扩展”群集以包括N个最近邻居

时间:2019-05-14 14:03:36

标签: algorithm optimization parallel-processing cluster-analysis computer-science

这听起来像是一个小问题,但是我在网上找不到任何东西。

我们有一组元素a b c d e。对于那些元素,定义了成对的距离。每个元素都需要处理。为了处理元素-需要N个最近的邻居。

问题:如何将这些元素分解为大小大致相等的M组,然后扩展这些组,以使该组内的每个元素在扩展组中将有N个最近的邻居。这可用于并行处理原始元素。

我正在使用Spark-但这可能可以抽象为任何并行计算。

这是一个例子:

We have following elements, the distance between them is just their difference.

N = 4 # number of nearest neighbours required for the computation
M = 2 # desired number of clusters

elements:
  1 2 3 4 5 6

basic clusters:
  1 2 3
  4 5 6

extended clusters:
  1 2 3 (4 5)
  4 5 6 (2 3)

这怎么称呼,是否有一些通用的方法来解决这种问题?我的理解是,这并不是严格意义上的clustering

此算法(集群+扩展)将在单个节点上运行,然后将合并大量数据并在分布式系统中进行处理。

1 个答案:

答案 0 :(得分:1)

第一步,可以测试一个简单的贪婪算法。

我觉得确定重叠(扩展)集,然后确定非扩展集更合乎逻辑。

让我们选择K(= M?)点与所有其他点尽可能远。
我假设在这里选择这样的极值点是可行的,在您的示例中为16
请注意,初始点数可能少于M。

    这些初始点Pi确定K组Si。
  1. 然后,每个Si由所需的Pi邻居完成。
  2. 对于每个集合,我们可以确定具有足够邻点的点的数量。
  3. 如果K
  4. 如果所有点及其所有邻居都在一个集合中:停止。
  5. 选择具有最低满意点数的集合,即所有邻居的集合。在此集合中,确定缺失邻居数量最少的点。随机选择一个这样的点,并用该点的缺失邻居来完成集合
  6. 转到步骤3,直到满足停止条件为止。

一个变种是继续执行该过程,直到每个集合都具有所需数量的满意点为止。

每个随机过程可能提供不同的解决方案。可以在不同的节点上并行执行几次尝试。

在您的简单示例中,该过程立即提供了解决方案:

  • S0 = {1}-> S0 = {1、2、3、4、5}
  • S1 = {6}-> S1 = {6,5,4,3,2}

两个不同的集合可能具有相同的满意点。即使此点必须保留在每个超出的集合中,也可以将其从一个非扩展集合中删除

该算法的一个理由:我认为极端点必须位于不同的非扩展集中。这意味着它们的邻居必须出现在对应的扩展集Si中。