最も孤立したポイントを効率的に計算する方法は?


8

有限集合を考えるとの点のRの D、どのように我々は、効率的に「最も孤立点」を計算することができますのx SをSRdxS

「最も孤立したポイント」x

x=argmaxpSminqS{p}d(p,q)

(必ずしも一意であるわけではありませんが、表記を使用しました。ここで、はユークリッド距離を示します。)つまり、最も近い近傍までの距離が最大のポイントを探しています。x=argmind

単純なアルゴリズムは、すべてのペアワイズ距離を計算し、すべてのポイントの距離が最小のネイバーを見つけ、それらの最大値を見つけます。これは演算を必要としますが、それよりもうまくできるでしょうか?O(n2)


最近傍検索のデータ構造を確認することをお勧めします。単純な方法よりも効率的にこの問題を解決するためにそれらを適応できると思います。
DW

@DW推薦ありがとうございます。kdツリーを調べてみましたが、この問題を解決するためのより効率的な方法が見つかりませんでした。
flawr 2018年

回答:


1

すべての最近傍に任意のアルゴリズムを使用します。その後、問題を簡単に解決できます。このようなアルゴリズムは、各データポイントについて、その最近傍を見つけます。最も孤立した点は、最も近い点が最も遠い点です。したがって、すべての最近点を解決したら、単純な線形スキャンによって最も孤立した点を見つけることができます。

どうやらすべての最近傍は時間で見つけることができます。ウィキペディアの参考文献を参照してください。または、何か実装したい場合は、最近傍のデータ構造を取り、各点、その最近傍を見つけます。O(nlogn)p


0

コメントで示唆されているように、私は最近隣クエリを調べます。

ポイントごとに1つのNNクエリを実行すると、の順序になるため、単純なソリューションよりも優れています。O(nlog(n))

さらに、これまでに見つけた最も孤立したポイントの最近傍距離を含むパラメーターをNN-Queryに追加することで、さらに改善できます。その後、よりも近い点を見つけるとすぐに、NNクエリを中止できます。これにより、検索がかなり高速になります。dmaxdmax

ところで、人々はしばしばNN-SearchにKD-Treesを提案します。KD-Treeは実装が非常に簡単ですが、私の経験では、他のツリーよりも高い次元では、一貫してスケーリングが低下します。用またはIは、R *ツリー(Rスターツリー)、X-ツリー又はSTR-ロードされたR-ツリー、またはそれ以上のAに似てPH-ツリー(のように、Rツリーを使用してお勧めしますのでビットごとの四分木)。d>10

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