我需要一种方法来识别两组点之间成对拟合的最佳组合,以便最小化聚类对之间的总距离。它似乎可能适合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:
答案 0 :(得分:2)
这不是聚类分析。这不是要在数据集中查找结构组件。
相反,您要寻找的是两个数据集中的JOIN
。
如果您允许每个点映射到其他数据集中的多个点,则它是最近邻居连接。否则,我不知道该怎么称呼它,但我知道一个解决它的算法:
Hungarian algorithm,也称为Kuhn-Munkres算法或Munkres赋值算法。最简单的解释如下:
n
个制作人m
个消费者,可能是m!= n,但是假设m = n。因此,您需要构建运费成本矩阵,列出每对生产者和消费者的成本。然后可以使用匈牙利算法来找到最佳映射。 (哪些可能涉及并不总是选择最近的邻居。)
答案 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