2013-03-07 110 views
2

我有一个包含不同值的数据集:查找相似

SET1 = {X1,X2,...,XN}

SET2 = {X1,X2,...,XN }

...

X值有不同的范围(这就是为什么我无法弄清楚需要算法来解决我的问题) - 有些是严格[0.0 - 1.0]值,其他人可能在不同/任何 范围。

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

很显然,我可以简单的写的长链“IF”语句的每个值与另一个比较,如果它们被一些DELTA量不同,我可以表明,两个给定集不是“同类”。问题是,我的集合非常庞大并且包含动态数据。因此,我需要一个通用函数来计算某种哈希值的每一套(至少这是我想的方式):

INT HASH1 =散列函数(集1)

INT HASH2 =散列函数(SET2)

如果(| HASH1 - HASH2 | < DELTA):回归 “设置类似于”

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

更新:

通过的意见,我意识到也许我应该改变我的问题有点以及阅读:什么是你有一个良好的“相似性”的建议指标?

通过“相似性”我的意思是表示“关闭”设置值怎么都是一些动态值。例如,如果我有一个测试集:组A {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 |/max(0.45,0.5)< | 100 - 300 |/max(100,300)

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

+3

您将不得不通过“类似”来显着提高您的意思,以获得有意义的答案。 – 2013-03-07 17:56:38

+0

语言的选择会在一定程度上影响回应 - 您正在处理什么样的堆栈? – JerKimball 2013-03-07 17:57:44

+0

你的设定元素是什么?号码?你有什么相似之处?例如,与{1.1; 1.9; 3.01}相比,{1; 2; 3}更接近{1; 2; 4}吗? – sds 2013-03-07 18:15:27

回答

0

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

很明显,该度量标准有几种可能的选择。常见的是绝对差值的总和(距离= | x1-y1 | + | x2-y2 | + ...)和差值的总和(距离=(x1-y1)2 +(x2-y2)2 + ...)。如果这些指标不适合您,请定义“相似”的含义。

0

由于您的集具有相同的基数,但你不关心顺序(即,它们是,不载体),这种方法我建议是:集进行排序,并把它们作为载体。

现在的问题是,哪个metric对R 可以选择。

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

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

reldist(X,Y)= ABS(XY)/ MAX(X,Y)

DIST (A,B) = SUM (reldist(一个,b ))

DIST (A,B)= SQRT(总和(reldist(一个,B )))

记住,A和B被分选,所以应该匹配b i