Задать вопрос
@tsvikm

Как сделать кластеризацию на основе хэширования?

Дано:
Есть много входных данных, пусть будет 1ТБ. Представим их в виде бинарного кода. Получившуюся бинарную последовательность разделим на части длины N. То есть будет очень большое количество бинарных последовательностей (далее сегментов) фиксированной длины N (длина N может быть разной, от 8 до 65536).

Цель:
Нужно выделить K кластеров, в каждом из которых будут содержаться похожие сегменты (степень похожести нужно задать).

Очевидно, что представить их как вектора размерности N и делать классическую кластеризацию по расстоянию (Хэмминга, Евклида и тп) выйдет слишком дорого, т.к. придется считать расстояния между всеми векторами (побитовое сравнение), которых очень много. Нужен какой-то алгоритм, который позволит делать кластеризацию по хеш-кодам. То есть сначала нужна хеш-функция, которая похожим векторам будет давать похожие хеш-коды. Или необязательно нужна такая хеш-функция, а нужен только алгоритм, который будет определять степень похожести векторов через их хеш-коды. Есть идеи, как это сделать? Или подскажите какие-нибудь алгоритмы. Такие есть, но на русском языке не нашел описания подходящего под эту задачу, а на английском такую литературу пока не могу переваривать. Заранее благодарен.

upd. Нашел вроде что-то подходящее, но не могу разобраться с этим (технический английский страдает): roussev.net/pubs/2010-IFIP--sdhash-design.pdf
Тут рассматриваются Rabin Fingerprinting, Fuzzy Hashing и то, как это работает. Кто-нибудь знает подобные статьи на русском языке или может помочь с адаптацией этой?
  • Вопрос задан
  • 2869 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
begemot_sun
@begemot_sun
Программист в душе.
Что в вашем понимании степень похожести векторов ?

Если вы берете хеш от данных, то он никак не связан с "похожестью вектора".
Для кластеризации по хешу, достаточно использовать хеш как 32 (64, или другое) битное число, и взять остаток от деления на кол-во необходимых вам групп.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Пусть бинарные последовательности - это предложения.
А набор характеристик в них - это слова.
Пусть разделитель - символ пробела.
Тогда используя этот алгоритм Как определить похожесть двух строк?
мы можем выбрать нужные нам записи с наименьшими затратами на производительность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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