ローカリティ センシティブ ハッシュ (LSH) の重要な考え方は、近隣ポイントvは同じバケットにマッピングされる可能性が高く、互いに離れたポイントは異なるバケットにマッピングされる可能性が高いということです。ランダム射影を使用する場合、データベースにそれぞれ高次元 d の N 個のサンプルが含まれている場合、理論では、ランダムに生成された k 個のハッシュ関数を作成する必要がありますg(**v**) = (h_1(v),h_2(v),...,h_k(v))
。したがって、任意のベクトル ポイントvについて、そのポイントは g 関数を使用して k 次元ベクトルにマッピングされます。この場合、ハッシュ コードは長さ / 次元 k を短縮したベクトルであり、バケットと見なされます。さて、衝突の確率を高めるために、理論によると、L 個のそのような g 関数g_1, g_2,...,g_L
をランダムに持つ必要があります。これは私が理解していない部分です。
質問 : 複数のハッシュ テーブルを作成する方法を教えてください。ハッシュ テーブルにはいくつのバケットが含まれていますか?
Sparse Projections for High-Dimensional Binary Codes
Yan Xiaらの論文に記載されているコードに従っています。al コードへのリンク
ファイル内Coding.m
dim = size(X_train, 2);
R = randn(dim, bit);
% coding
B_query = (X_query*R >= 0);
B_base = (X_base*R >=0);
X_query
はそれぞれ次元 d のクエリ データのセットで、1000 個のクエリ サンプルがあります。R
はランダムな射影で、bit はターゲットの縮小次元です。との出力は、B_query
0 /1 の値を取る長さの文字列です。この方法で複数のハッシュ テーブルが作成されますか。つまり、ハッシュ テーブルの数ですか。どうしようか迷っています。詳しい解説とても参考になります。B_base
N
k
N