8

時空間データ (x、y、z、time) を並べ替えるためにデータ構造を使用したいと考えています。

現在、処理アルゴリズムは、球形 (3d) の空間半径と線形 (1d) の時間半径を指定して、一連の 4D (x,y,z,time) ポイントを検索し、各ポイントをマークし、他のポイントがそれらの半径内にあります。その理由は、処理後、任意の 4D 点に O(1) 時間ですべての隣接点を求めることができるからです。

ただし、空間半径と時間半径の一部の一般的な構成では、アルゴリズムの最初の実行に約 12 時間かかります。信じられないかもしれませんが、これは業界に存在するものと比較して実際に高速です。それにもかかわらず、私は最初の実行をスピードアップしたいので、知りたいです: kdツリーは4D時空間データに適していますか?

最近傍検索や k 最近傍検索の実装を探しているわけではないことに注意してください。

より詳しい情報:

サンプル データセットには 450,000 の 4D ポイントがあります。

一部のデータセットは時間密度が高いため、時間で並べ替えると処理が確実に節約されますが、それでも多くの距離チェックが必要になります。

時間は Excel スタイルの日付で表され、通常は 30,000 ~ 39,000 (概算) の範囲です。空間範囲は高い値の場合も低い値の場合もありますが、各空間座標間の範囲は時間に似ています (例: maxX-minX ~ maxT-minT)。

さらに詳しい情報:

誰かが同様のデータセットを扱った場合に備えて、少し無関係なデータを追加すると思いました。

基本的に、複数のセンサーによって記録および裏付けられた時空間イベントを表すデータを扱っています。エラーが含まれているため、エラーのしきい値を満たすイベントのみが含まれます。

これらのデータセットの期間は、5 ~ 20 年のデータの範囲です。

非常に古いデータ (>8 年) の場合、2 つの理由により、イベントは非常に空間的に高密度であることがよくありました。低誤差で確認。さらにイベントを記録できましたが、エラーが多すぎました

新しいデータ (8 年未満) の場合、逆の理由で、イベントは非常に時間密度が高くなることがよくあります。1) 通常は多くのセンサーが利用可能であり、2) センサーはより長い距離にわたって一定の間隔で配置されています。

その結果、データセットは通常、時間密度が高いだけ、または空間密度が高いだけであるとは言えません (新しいデータのみを含むデータセットの場合を除く)。

結論

明らかに、このサイトでもっと質問する必要があります。

今後は、4 次元 kd ツリー、3 次元 kd ツリーに続く時間距離チェック (Drew Hall の提案)、および現在のアルゴリズムを含むいくつかのソリューションをテストする予定です。また、TSP (time space partitioning) ツリーと呼ばれる別のデータ構造が提案されています。これは、空間には octree を使用し、時間には各ノードの bsp を使用するので、それもテストする可能性があります。

私が覚えていると仮定すると、さまざまな時間/空間半径構成でいくつかのプロファイリング ベンチマークを必ず投稿します。

皆さんありがとう

4

4 に答える 4

6

上記の答えへの私のコメントを少し拡張するには:

文献によると、kd木はユークリッド座標のデータを必要とします。それらはおそらく厳密には必要ではありませんが、確かに十分です。すべての座標がユークリッドであることを保証することで、通常の空間規則が適用され、ポイントをその場所で簡単に分割してツリー構造を構築できるようになります。

時間は少し奇妙です。特殊相対性理論では、時間座標を使用する場合は、標準のユークリッド距離ではなく、ミンコフスキー距離を使用します。これはあらゆる種類の問題を引き起こし(その中で最も深刻なのは「同時性」の意味を破壊する)、一般的に人々は時間座標を恐れるようになります。ただし、物理学に取り組んでいることを知らない限り、実際の時間座標はほぼ確実にユークリッドになるため、その恐れは十分に根拠がありません。

座標がユークリッドであるとはどういう意味ですか?他のすべての座標から独立している必要があります。時間はユークリッド座標であると言うことは、「これらの2つのポイントは時間的に接近していますか?」という質問に答えることができることを意味します。それらの時間座標のみを見て、余分な情報を無視することによって。そのプロパティがないと、ポイントを座標の値で分割するスキームが壊れてしまう理由は簡単にわかります。2つのポイントの時間座標が根本的に異なる可能性があるが、それでも「時間的に近い」と見なされる場合、時間座標でそれらを並べ替えるツリーはうまく機能しません。

ユークリッド時間座標の例は、単一の一貫したタイムゾーン(UTC時間など)で指定された任意の時間です。ニューヨークと東京の2つの時計がある場合、「12:00 UTC」というラベルの付いた2つの測定値がある場合、それらは同時に取得されたことがわかります。ただし、測定が現地時間で行われる場合、1つは「12:00ニューヨーク時間」、もう1つは「12:00東京時間」と言う場合、都市の場所とタイムゾーンに関する追加情報を使用して把握する必要があります。 2つの測定の間に経過した時間。

時間座標が一貫して測定され、正常である限り、それはユークリッドになります。つまり、kdツリーまたは同様のデータ構造で問題なく機能します。

于 2009-04-25T02:57:32.250 に答える
1

データが比較的時間密度が高い (そして空間が比較的疎) 場合は、空間次元で 3 次元 kd ツリーを使用してから、関心のある時間枠の外にあるポイントを単純に拒否するのが最適な場合があります。それは、少し複雑なポイント構造体を犠牲にして、混合空間/時間メトリックの問題を回避します。

于 2009-04-25T01:51:22.347 に答える
1

時間次元でソートされたポイントへのインデックスを格納した場合、最初に 1 次元の時間次元で最初の枝刈りを実行して、距離計算の数を減らすことができませんでしたか? (それとも単純化しすぎ?)

于 2009-04-25T01:24:18.277 に答える
1

あなたはこれに答えるのに十分な情報を提供していません。

しかし、確かに、一般的にkdツリーは4(または5または6または...)次元データに完全に適しています---空間(またはあなたの場合は空間/時間)分布がkdツリー分解に役立つ場合. 言い換えれば、それは依存します (聞き覚えがありますか?)。

kd ツリーは、特定のローカライズされた検索に役立つ空間分解の 1 つの方法にすぎません。もちろん、より高い次元に行くと、次元の問題の呪いが頭をよぎりますが、4d もそれほど悪くはありません (おそらく、少なくとも数百ポイントは必要です)。

これがうまくいくかどうかを知るためには、他の基準を分析する必要があります。おおよそのNN検索で十分ですか(これは大いに役立ちます)。ツリーバランシングは高くつきそうですか? 等

于 2009-04-25T01:17:09.290 に答える