Спасибо тем, кто ответил на мои предыдущие вопросы и дошел до меня.
У меня есть таблица из примерно 25 000 векторов, каждый из которых имеет 48 измерений, со значениями в диапазоне от 0 до 255.
Я пытаюсь разработать алгоритм хеширования, чувствительный к локальности (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) функция, которую я использую для создания «d-мерного вектора с записями, выбранными независимо от стабильного распределения». Из моих экспериментов значения, кажется, не имеют большого значения.
B: В верхней части статьи в Википедии говорится:
, если d (p, q) <= R, то h (p) = h (q) с вероятностью принаименьший P1 </p>
, если d (p, q)> = cR, то h (p) = h (q) с вероятностьюty не более P2
Является ли значение R, упомянутое здесь, также значением R, упомянутым в разделе «Стабильные распределения».(http://en.wikipedia.org/wiki/Locality-sensitive_hashing#Stable_distributions)
C: Относится к моему предыдущему вопросу (B). Я обнаружил, что использование более высоких значений R в моей функции хэширования отображает мои векторы в меньший диапазон хэшазначения. Есть ли способ оптимизировать мое значение R.
D: Приблизительно сколько таблиц можно использовать?