セット内のすべてのポイントのk番目の最近傍までの距離を計算する


9

機械学習アプリケーションの場合、私のグループは、各(が5から約100の間について、セットの番目の最近傍へのユークリッド距離を計算する必要があります、および数百から数百万まで)。我々は現在、いずれかのブルートフォース使用しているアプローチまたは上のkdツリーとの明白な、あり、高いと比較的低いです勝つことはありません。(すべてがメモリ内にあります。)kXx(XY)Rdd|X||Y|O(d|X||XY|)Xd|X|

ただし、ブルートフォースよりも優れた方法があるはずです。少なくとも、三角形の不等式を利用する方法、または局所性に敏感なハッシュを使用する方法があります。適度にタイトな近似も可能です。

私が見つけることができた研究は、単一の最近傍(またはほぼ最近傍のもの)を見つける問題に焦点を当てているようです。私が探している問題は別の名前でわかりますか、または私が考えていなかった関連する問題への関連はありますか?


2
kd-treeは、三角形の不等式を利用します。他の空間データ分割ツリーを使用してみましたか?特定の点が構造を持つ傾向があるかどうか(機械学習アルゴリズムについては何も知りません)を調べてもよいもう1つのことは、超平面をすばやく見つけて、通常の中央値ではなくkdのようなツリーでそれらを使用するのに役立つ場合があります高次元ではパフォーマンスが低下する座標分割。
ロススナイダー

@RossSniderの提案に感謝します。そして確かに、KDツリーは三角形の不等式を使用しますが、私はブルートフォースよりも速い何かを考えていました。:)他にどのような種類の空間データ分割ツリーをお勧めしますか?うちWikipediaのリストだけ多分VP-木は、適用に見える、と彼らはユークリッド距離のためのKD-木よりも良いだろうように、彼らはいないようです。そして、分離超平面を定義するためのより良い問題固有の方法があるかどうかを考えますが、頭に浮かぶことはありません。
Dougal

すべて(およびその他の点)についてこれを評価していることがわかっているという事実が、アルゴリズムに何らかの助けを与えることを期待していたと思います。それが事実かどうかはわかりませんが。X
Dougal

あなたのアプリケーションで通常は何ですか?k
Suresh Venkat

1
@SureshVenkat私たちは通常、約3のを使用します。k
Dougal

回答:


10

ここに役立つかもしれない簡単なトリックがあります。確率1 / kですべての点を選択するランダムサンプルを考えます。可能性が高い場合、kの最近傍の1つだけがサンプルに含まれることを確認するのは簡単です。標本の最近傍点を計算します。これをO(k log n)回繰り返します。高い確率で、計算されたポイントのk個の最近傍点は、クエリのk個の最近傍点です。したがって、k最近傍を見つけることは、O k log n 最近傍クエリを実行することと同じです。OkログO(klogn

要するに、最近傍クエリに答えるための高速データ構造を教えてください。k最近傍の高速データ構造を提供できれば幸いです。


素敵なトリック。さまざまなクエリポイントのサンプルも再利用しても問題ありませんか?したがって、セット内の各点の -nearest-neighbor を計算するには、データ構造をO k log n 回作成するだけです。kOkログ
Dougal

1
サンプルを再利用するのは注意が必要です。それは、固定サンプルがすべてのクエリで機能する必要があり(定量化が反転される)、確率が変化するためです。一般的なアイデアは、より大きなサイズのサンプルのセット(これは#queriesに依存します)を構築し、問題がある場合はそれらを使用することです。
Suresh Venkat

@SureshVenkatああ、もちろん。私は座って、実際の確率を理解します。みんな、ありがとう!
Dougal

その場合はのサンプルを、各クエリは確率で成功する1 - δ。このトリックは、最初の垣間見るよりも少し優れていることに注意してください-O k log n サンプルがあり、それぞれがサイズO n / k )ですkが大きすぎない場合は高い確率で)。つまり、各サンプルのクエリ時間が短縮されます。O(klog(1/δ))1δO(klogn)O(n/kk
Sariel Har-Peled

3

「局所性に敏感なハッシュ」を使用する安価な近似解は、各ポイントをビットインターリーブ形式に変換することです。

[xxx、yyy、zzz]-> xyzxyzxyz

次に、前処理のための基数ソート。

クエリするポイントを選択し、両方向にポイント移動して、サイズ2 kセットを取得します。次に、あなたの点に最も近いk t hを取ります。ConnorとKumarによるこの論文も参照してください。k2kkth

キャラハンとコサラジュによるこの論文も参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.