2

異なる値を含むデータセットがあります:

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

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

...

X 値の範囲は異なります (これがまさに、問題を解決するために必要なアルゴリズムを理解できない理由です) - 一部は厳密に [0.0 - 1.0] 値であり、他の値は異なる/任意の範囲にある可能性があります。

これらのセットを「グループ化」する方法、つまり、指定された 2 つのセット間の「類似性」を見つける方法を見つける必要があります。

明らかに、各値を別の値と比較する "IF" ステートメントの長いチェーンを単純に書くことができ、それらが DELTA 量だけ異なる場合は、2 つの与えられたセットが "類似" していないことを示すことができます。問題は、私のセットが巨大で、動的データが含まれていることです。したがって、各セットのある種のハッシュ値を計算するための汎用関数が必要です(少なくともそれが私が考えている方法です):

int hash1 = HashFunction(Set1)

int hash2 = HashFunction(Set2)

if (|hash1 - hash2| < DELTA): 「セットは類似しています」を返す

実装方法のヒントやアイデアをいただければ幸いです。

アップデート:

コメントを読んで、質問を少し変更する必要があるかもしれないことに気付きました。良い「類似性」指標についての提案は何ですか?

「類似性」とは、セットの値がどの程度「近い」かを示す動的な値を意味します。たとえば、テスト セット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) < |100 - 300| /最大(100、300)

単純に 2 つのセット間の値の差の合計を計算すると、意味のある結果は得られません (2 つのセットには (論理的な観点から) 完全に異なる数値が含まれている可能性がありますが、互いに相殺して誤った結果が得られるため)。

4

2 に答える 2

0

したがって、2つのオブジェクト間の距離を知りたいと思います。数学では、集合とその集合内のオブジェクトの距離を与える演算を組み合わせたものは、距離空間と呼ばれます。

明らかに、メトリックにはいくつかの可能な選択肢があります。一般的なものは、絶対差の合計(distance = | x1-y1 | + | x2-y2 | + ...)と2乗の差の合計(distance =(x1-y1)²+(x2-y2)²+)です。 ...)。これらの指標が適切でない場合は、「類似」の意味を定義してください。

于 2013-03-07T18:22:28.340 に答える
0

セットのカーディナリティは同じですが、順序は気にしないため(つまり、セットであり、ベクトルではありません)、私が提案するアプローチは、セットを並べ替えてベクトルとして扱うことです。

ここで問題となるのは、R2のどのメトリックを選択するかです。

オプションはたくさんあります。基本的に、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 i2))

AとBはソートされているため、aiはbiと一致する必要があることに注意してください。

于 2013-03-07T19:15:26.077 に答える