查找数据集之间的相似性

时间:2013-03-07 17:54:13

标签: algorithm math hash dataset

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

  

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

     

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

     

...

X值具有不同的范围(这正是为什么我无法找出解决我的问题所需的算法) - 一些是严格的[0.0 - 1.0]值,其他可能在不同/任何范围内。

我需要找到一种方法来" group"这些集合,换句话说 - 找到"相似性"在两个给定集之间。

显然,我可以简单地写出长链#34; IF"将每个值与另一个值进行比较的语句,如果它们相差一些DELTA金额,我可以指出两个给定的集合不是"相似的"。问题是,我的集很庞大,包含动态数据。因此,我需要一个泛型函数来计算每个集合的某种哈希值(至少是我思考的方式):

  

int hash1 = HashFunction(Set1)

     

int hash2 = HashFunction(Set2)

     

if(| hash1 - hash2 |< DELTA):return"集合类似"

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

更新

通过评论阅读我意识到也许我应该稍微改变一下我的问题:你对一个好的"相似性的建议是什么?度量?

通过"相似性"我的意思是一些动态值,表明"关闭"设定'价值观是。例如,如果我有一个测试集: SetA {0.5,100} ,那么 SetB {0.5,100} 应该产生1(或其他一些表示完美匹配的值) )。同样比较 SetA SetC {0.1,300} 应该返回更低的"匹配"值,而 SetD {0.45,101} 应返回类似于"完全匹配"的值。这里要注意的关键事项,例如0.45和0.5的值是"更相似"比值100和300因为: | 0.45 - 0.5 | / max(0.45,0.5)< | 100 - 300 | / max(100,300)

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

2 个答案:

答案 0 :(得分:0)

所以,你想知道两个物体之间的距离。在数学中,集合与为集合中的对象提供距离的操作一起称为metric space

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

答案 1 :(得分:0)

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

现在问题是,选择R 2 metric

选项很多。基本上,您可以在R上选择任何度量并按坐标方式组合它们。

因此,如果您想要相对差异,可以定义

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

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

DIST <子> 2 (A,B)= SQRT(总和<子> I (reldist(一<子> I ,B <子> I 2 ))

记住,A和B是排序的,所以 i 应匹配b i