Высокий размер ближайшее соседнее хеширование чувствительности поиска и местности

Вот основная проблема. У меня есть очень большая база данных (приблизительно 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: Инструкции относительно того, как создать хеш-функции на основе других методов хеширования?

7
задан kennytm 16 July 2010 в 07:07
поделиться

2 ответа

Возможно, это немного не по теме, но вы можете попробовать использовать PCA http://en.wikipedia.org/wiki/Principal_component_analysis для уменьшения размерности набора данных. Должно быть много модулей PCA для numPy (например, http://folk.uio.no/henninri/pca_module/). Метод довольно прост, и с готовыми модулями это будет проще простого.

Основное, что он делает, это уменьшает число измерений (вы должны иметь возможность указать желаемое число), максимизируя дисперсию в пределах заданного числа измерений.

2
ответ дан 7 December 2019 в 14:28
поделиться

Вот два ответа:

B : На странице Википедии указано, что math.floor () следует использовать в hashVal : вот как вы получаете целые числа.

C : Если вы хотите использовать метод Хэмминга, вы можете реализовать его довольно просто: каждая хеш-функция Хэмминга просто определяется координатой (от 0 до 47) и числом бита (от 0 до 7). . Вы можете получить значение целого числа в заданном бите b с помощью:

bool(i & 2**b)
2
ответ дан 7 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: