Библиотеки LSH на Яве
Я ищу легковесную библиотеку Java, которая поддерживает поиск ближайших соседей с помощью локально-чувствительного хеширования для почти одинаково распределенных данных в многомерном (в моем случае 32) наборе данных с несколькими сотнями тысяч точек данных.
Это достаточно хорошо, чтобы получить все записи в корзине для запроса. Какие из них мне действительно нужны, могут быть обработаны другим способом с учетом некоторых параметров фильтра, к которым относится моя проблема.
Я уже нашел Likelike, но надеюсь, что есть что-то немного меньше и без необходимости каких-либо других инструментов (например, Apache Hadoop в случае Likelike).
4 ответа
Может быть этот:
"TarsosLSH - это библиотека Java, реализующая локально-зависимое хеширование (LSH), практичный алгоритм поиска ближайшего соседа для многомерных векторов, работающий в сублинейном времени. Он поддерживает несколько семейств локально-чувствительного хеширования (LSH): евклидово семейство хешей (L2), город семейство блочных хэшей (L1) и семейство косинусных хэшей. Библиотека пытается найти хорошее место: она достаточно способна выполнять реальные задачи и достаточно компактна, чтобы служить демонстрацией того, как работает LSH ".
Код можно найти здесь
Вот еще один: https://github.com/tdebatty/java-LSH. Похоже, что он недавно обновлен, чем некоторые другие опции здесь.
Эта страница содержит ссылки на другие проекты, а также соответствующие документы и информацию: https://janzhou.org/lsh/.
Вот еще один: https://github.com/allenlsy/knn
Он использует LSH для KNN. Я сейчас изучаю его юзабилити =)
Инфраструктура интеллектуального анализа данных ELKI поставляется с индексом LSH. Он может использоваться с большинством включенных алгоритмов (все, что использует поиск по диапазону или nn) и иногда работает очень хорошо.
В других случаях LSH не кажется хорошим подходом. Может быть довольно сложно получить правильные параметры LSH: если вы выбираете слишком высокие параметры, время выполнения сильно возрастает (вплоть до линейного сканирования). Если вы выбираете их слишком низко, индекс становится слишком приблизительным и проигрывает многим соседям.
Вероятно, это самая большая проблема с LSH: найти хорошие параметры, которые дают желаемое ускорение и получить достаточно хорошую точность из индекса...
Вот это: http://code.google.com/p/lsh-clustering/
У меня не было времени, чтобы проверить это, но по крайней мере он компилируется.