我在Java中编写了自己的EMD直方图距离实现。
请参阅此输入和输出示例:
h1 = mapOf(5 to 0.5, 7 to 0.5)
h2 = mapOf(2 to 0.3, 8 to 0.7)
emd(h1, h2) evaluates to 2.0
现在,我想为它生成随机测试以检查其正确性。
是否有一种很好的方法可以生成两种最常见形式的直方图(任意数量的项目,非平凡项目),它们之间有已知的EMD?
生成一对直方图h1
,h2
,计算emd(h1, h2)
,然后将h1
修改为g1
,{{1转到h2
并检查g2
与emd(g1, g2)
的区别,但是我需要一种修改emd(h1, h2)
和h1
的方法,以便EMD在一种可预测的方式。
我尝试分别在h2
和k1
中找到最相似的密钥k2
和h1
,并将h2
添加到C
和h1[k1]
,期望h2[k2]
会因emd(h1, h2)
而改变,但似乎并不总是如此。
我的实现可以使用直方图和任何类型的密钥为它们提供度量标准,但C
具有int
指标的直方图足以进行测试。