2013-03-07 91 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