6

以前の質問に答えてくれて、ここまでたどり着いてくれた人たちに感謝します。

約 25,000 個のベクトルのテーブルがあり、それぞれが 48 次元で、値の範囲は 0 ~ 255 です。

近傍点または最近傍点を見つけるための Locality Sensitive Hash ( http://en.wikipedia.org/wiki/Locality-sensitive_hashing ) アルゴリズムを開発しようとしています。

私の現在のLSH関数はこれです:

def lsh(vector, r = 1.0, a = None, b = None):
    if not a:
        a = [normalvariate(10, 4) for i in range(48)]
    if not b:
        b = uniform(0, r)
    hashVal = floor((sum([a[i]*vector[i] for i in range(48)]) + b)/r)
    return int(hashVal)

この時点での私の質問は次のとおりです。

A:コードの「normalvariate(10, 4)」部分に最適な値はありますか。これは、random.normalvariate ( http://docs.python.org/library/random.html#random.normalvariate ) 関数に組み込まれた python であり、「安定した分布から独立して選択されたエントリを持つ d 次元ベクトル」を生成するために使用しています。 . 私の実験から、値はあまり重要ではないようです。

B:ウィキペディアの記事の上部には、次のように記載されています。

d(p,q) <= R の場合、少なくとも P1 の確率で h(p) = h(q)

d(p,q) >= cR の場合、h(p) = h(q) で確率は最大 P2

ここで言及されている R 値は、安定分布セクションで言及されている R 値でもありますか。( http://en.wikipedia.org/wiki/Locality-sensitive_hashing#Stable_distributions )

C:前の質問 (B) に関連しています。hasing 関数でより高い値の R を使用すると、ベクトルがより狭い範囲のハッシュ値にマップされることがわかりました。R 値を最適化する方法はありますか。

D:およそいくつのテーブルを使用できますか?

4

2 に答える 2

2

機械学習用のスタック オーバーフローのような "MetaOptimize" をチェックしてみてください。
http://metaoptimize.com/qa

あなたの質問は、実際には python やプログラミングの質問ではありません。そのコミュニティがもう少し役立つかもしれません。

于 2010-07-21T18:07:27.320 に答える
2

興味のある方へ。このドキュメントを見つけました ( http://web.mit.edu/andoni/www/papers/cSquared.pdfには、高次元空間で LSH を使用する方法について複雑ではありますが、非常に詳細な説明があります。

于 2010-07-17T19:08:06.467 に答える