两组点之间的成对匹配

时间:2015-01-28 12:41:04

标签: r cluster-analysis

我需要一种方法来识别两组点之间成对拟合的最佳组合,以便最小化聚类对之间的总距离。它似乎可能适合k-means(如果最大/最小的簇大小约束为2,则为'n'对)但我不知道任何可以在2组之间聚类的函数。有没有人知道适当的功能或替代聚类方法?

作为一个起点,它看起来像以下几组点的解决方案:

set1 <- data.frame(id=c('A','B','C'), x = c(3,4,7), y = c(4,2,6))
set2 <- data.frame(id=c('X','Y','Z'), x = c(2,5,8), y = c(5,6,7))

...是AX,BY,CZ:

enter image description here

2 个答案:

答案 0 :(得分:2)

这不是聚类分析。这不是要在数据集中查找结构组件。

相反,您要寻找的是两个数据集中的JOIN

如果您允许每个点映射到其他数据集中的多个点,则它是最近邻居连接。否则,我不知道该怎么称呼它,但我知道一个解决它的算法:

Hungarian algorithm,也称为Kuhn-Munkres算法或Munkres赋值算法。最简单的解释如下:

  1. 您有n个制作人
  2. 你有m个消费者,可能是m!= n,但是假设m = n。
  3. 您希望通过以下方式最大化您的利润:最大限度地降低运输成本,使产品从生产者到消费者
  4. 因此,您需要构建运费成本矩阵,列出每对生产者和消费者的成本。然后可以使用匈牙利算法来找到最佳映射。 (哪些可能涉及并不总是选择最近的邻居。)

答案 1 :(得分:1)

继@ Anoiny-Mousse的回答,这个R实现对我有用:

require(clue)
dist_mat = fields::rdist(set1[,2:3], set2[,2:3])
soln = solve_LSAP(dist_mat)
data.frame(set1 = set1$id, set2 = set2$id[soln])
  set1 set2
1    A    X
2    B    Y
3    C    Z