0

30 次元のベクトルを取得し、データベースで最も近い 10 個の一致を見つけたいと考えています。DB には約 3000 のベクトルがあり、それらを比較しています。一部のディメンションは他のディメンションよりも重要であるため、すべてのディメンションに個別の重みを付けたいと考えています。

30 次元は、RGB 値を 10 倍したものです。写真を 9 枚のタイルに分割しました。したがって、9 * 3 (RGB) 27 です。最後の 3 つの値は、画像の平均色の RGB です。

私の質問は次のとおりです。もしそうなら、これは可能ですか。このプロセスをできるだけ迅速かつ効率的にするための最良の方法は何ですか? 私自身、ある種の木について考えていましたが、あまりにも多くの木があり、どれが私の問題に最も適しているかわかりません。

編集:

何を達成したいのかが完全に明確ではなかったと思います。ランダムなベクトルがあり、これを DB 内のベクトルと比較して、10 が閉じていることを確認したいと考えています。すべてのベクターを含む DB があります。それらをMySQL DBに保存しました。すべての行はベクトルです。下記参照

DB

4

1 に答える 1

0

この問題は、基準点が多すぎる場合に、基準点に最も近い n 個の点を見つける問題に似ています。

2 つのベクトルを比較してそれらの間の「距離」を見つける方法を知っていると仮定すると、これには最大ヒープを使用できます。データベースからの 2 つのベクトルを比較するためのキーとして、ランダム ベクトルからの距離を使用します。あれは、

  1. データベース内の最初の 10 個のベクトルからランダム ベクトルの距離を見つけ、それらをサイズ 10 の最大ヒープに格納します。したがって、ルートは、これまでランダム ベクトルから最も遠いベクトルになります。
  2. ランダムなベクトルから他のすべてのベクトルまでの距離を 1 つずつ比較して見つけます。
  3. 各比較で、検出された距離が最大ヒープのルートより小さい場合は、ヒープから最大要素を抽出し、最新のベクトルをヒープに挿入します。
  4. 最後に、最も近い 10 個のベクトルがヒープに含まれます。

そうは言っても、あなたの問題空間は本当に小さいようです。したがって、コメントで提案されているように、ブルートフォースを使用できます。

于 2012-12-25T15:52:41.890 に答える