2

我有包含不同值的数据集:

Set1 = {X1, X2, ..., Xn}

Set2 = {X1, X2, ..., Xn}

...

X 值具有不同的范围(这正是我无法弄清楚解决我的问题所需的算法的原因) - 有些是严格的 [0.0 - 1.0] 值,有些可能在不同/任何范围内。

我需要找到一种方法来“分组”这些集合,或者换句话说 - 找到两个给定集合之间的“相似性”。

显然,我可以简单地编写长链的“IF”语句,将每个值与另一个值进行比较,如果它们相差一些 DELTA 量,我可以指出两个给定的集合不是“相似的”。问题是,我的集合很大并且包含动态数据。因此,我需要一个通用函数来计算每组的某种哈希值(至少我是这样想的):

int hash1 = HashFunction(Set1)

int hash2 = HashFunction(Set2)

if (|hash1 - hash2| < DELTA): return "Sets are similar"

我真的很感激如何实现它的任何提示或想法。

更新:

阅读评论后,我意识到也许我也应该稍微改变一下我的问题:您对良好的“相似性”指标有何建议?

“相似性”是指一些动态值,表示“接近”集合的值有多接近。例如,如果我有一个测试集:SetA{ 0.5, 100 },那么SetB{ 0.5, 100 }应该产生 1(或其他表示完美匹配的值)。同时比较SetASetC { 0.1, 300 }应该返回低很多的“匹配”值,而SetD { 0.45, 101 }应该返回一个类似于“完美匹配”的值。这里要注意的关键点,例如 0.45 和 0.5 的值比 100 和 300 的值“更相似”,因为:|0.45 - 0.5| / 最大值(0.45, 0.5) < |100 - 300| / 最大(100, 300)

如果我只是计算两组之间的值差之和,它不会为我提供任何有意义的结果(因为两组可以包含完全不同的数字(从逻辑角度来看),但相互抵消却给出不正确的结果)

4

2 回答 2

0

所以,你想知道两个物体之间的距离。在数学中,一个集合与一个给出集合中对象距离的操作一起被称为度量空间

显然,该指标有几种可能的选择。常见的是绝对差之和(距离 = |x1-y1|+|x2-y2|+...)和平方差之和(距离 = (x1-y1)²+(x2-y2)²+ ...)。如果这些指标不适合您,请定义“相似”的含义。

于 2013-03-07T18:22:28.340 回答
0

由于您的集合具有相同的基数,但您不关心顺序(即它们是集合,而不是向量),我建议的一种方法是:对集合进行排序并将它们视为向量。

现在的问题是,选择R 2上的哪个指标

选项很多。基本上,您可以选择 R 上的任何指标并将它们按坐标组合。

所以,如果你想要相对差异,你可以定义

reldist(x,y) = abs(xy)/max(x,y)

dist 1 (A,B) = sum i (reldist(a i ,b i ))

或者

dist 2 (A,B)=sqrt(sum i (reldist(a i ,b i ) 2 ))

请记住,A 和 B 已排序,因此 a i应该匹配 b i

于 2013-03-07T19:15:26.077 回答