生成用于统计分析的匹配对

时间:2015-04-12 00:22:19

标签: optimization machine-learning hungarian-algorithm

在我的研究中,一个人被表示为一对实数(x,y)。 x在[30,80]上,y是[60,120]。有两种类型的人,A和B.我有每种类型约300。如何从A生成一个人的最大(甚至是大)一对,其中一个来自B:((xA,yA),(xB,yB)),使得每对点都接近?如果abs(x1-x2)

2 个答案:

答案 0 :(得分:2)

您正在寻找Hungarian Algorithm

建议的配方:A是行,B是列,每个单元包含Ai和Bi之间的距离度量,例如, abs(X(Ai)-X(Bi))+ abs(Y(Ai)-Y(Bi))。 (如果希望距离与每个变量的范围成比例,可以将X和Y值标准化为[0,1])

然后使用匈牙利算法最小化匹配权重。

您可以过滤距离超过阈值的匹配项。如果您担心此过滤可能会导致方法不理想,您可以将阈值上的距离设置为非常高的数字。

此算法有很多实现。短搜索以任何可想到的语言找到一个,包括VBA for Excel和一些online solvers(不确定是否与他们匹配300x300矩阵)

答案 1 :(得分:1)

匈牙利算法做到了,谢谢Etov。

此处提供的源代码:http://www.filedropper.com/stackoverflow1