Вот основная проблема.У меня есть очень большая база данных (25 000 или около того) из 48 векторов, каждый из которых заполнен значениями в диапазоне от 0 до 255.Специфика не так важна, но я полагаю, что это может помочь создать контекст.
Мне не нужен ближайший сосед, поэтому приемлемы приблизительные поиски соседей, которые находятся в некоторой степени точности.Я играю с Хеширование чувствительности местности , но я очень сильно растерялся.
Я написал хеш-функцию, как лучше всего описано в статье в разделе "Стабильные распределения"Можно.Вот код:
def lsh(vector, mean, stdev, r = 1.0, a = None, b = None):
if not a:
a = [normalvariate(mean, stdev) for i in range(48)]
if not b:
b = uniform(0, r)
hashVal = (sum([a[i]*vectorA[i] for i in range(48)]) + b)/r
return hashVal
Функция хеширования "работает", по крайней мере, некоторые.Если я упорядочу список точек по хэш-значению и вычислю среднее расстояние между точкой и ее соседом в списке, среднее расстояние составит около 400, по сравнению со средним расстоянием около 530 для любых двух случайно выбранных точек.
Мои самые большие вопросы:
A: Любые предложения о том, где я могу прочитать больше об этом.Мой поиск не дал много результатов.
B: Метод предполагает вывод целочисленного значения (а моего нет).И затем вы должны попытаться найти совпадения для этого целочисленного значения, а совпадение означает вероятного ближайшего соседа.Я понимаю, что должен вычислить некоторый набор таблиц значений хеш-функции для всех моих точек, а затем проверить упомянутые таблицы на наличие совпадений хэшей, но значения, которые я возвращаю, не кажутся достаточно хорошими, чтобы в итоге я получилспички на всех.С моей стороны требуется дополнительное тестирование.
C: Инструкции о том, как создавать хеш-функции на основе других методов хеширования?