Java中的LSH库

时间:2012-03-28 14:57:56

标签: java locality-sensitive-hash

我正在寻找一个轻量级的Java库,它支持Locality Sensitive Hashing的最近邻搜索,以便在具有数十万个数据点的高维(在我的情况下为32)数据集中提供几乎相等的分布式数据。

将查询中的所有条目都放入存储桶中就足够了。考虑到我的问题包括的一些过滤器参数,然后可以以不同的方式处理我真正需要的那些。

我已经找到likelike,但希望有一些更小的东西,而不需要任何其他工具(如可爱的情况下的Apache Hadoop)。

5 个答案:

答案 0 :(得分:6)

也许这一个:

“TarsosLSH是一个实现局部敏感哈希(LSH)的Java库,这是一种在次线性时间内运行的多维向量的实用最近邻搜索算法。它支持多个局部敏感哈希(LSH)族:欧几里德哈希族(L2) ),城市街区哈希家族(L1)和余弦哈希家族。图书馆试图在能够完成真正任务的能力之间达到最佳点,并且足够紧凑以充当LSH如何工作的示范。

可以找到代码here

答案 1 :(得分:1)

有这一个: http://code.google.com/p/lsh-clustering/

我没有时间测试它,但至少它会编译。

答案 2 :(得分:1)

这是另一个: https://github.com/allenlsy/knn

它使用LSH用于KNN。我正在调查它的可用性=)

答案 3 :(得分:1)

ELKI数据挖掘框架附带一个LSH索引。它可以与大多数算法一起使用(任何使用范围或nn搜索的算法),有时效果很好。

在其他情况下,LSH似乎不是一个好方法。获得正确的LSH参数可能非常棘手:如果选择某些参数太高,运行时间会增长很多(一直到线性扫描)。如果你选择它们太低,那么索引会变得过于接近并且会失去许多邻居。

这可能是LSH面临的最大挑战:找到好的参数,产生所需的加速从索引中获得足够好的准确度......

答案 4 :(得分:1)

Apache Spark具有LSH实现:https://spark.apache.org/docs/2.1.0/ml-features.html#locality-sensitive-hashingAPI)。

在同时使用tdebattyTarsosLSH实现之后,我很可能会使用Spark,因为它支持稀疏向量作为输入。 tdebatty需要一个布尔或int的非稀疏数组,而TarsosLSH Vector实现是一个双精度的非稀疏数组。这严重限制了人们可以合理支持的维度数量。

此页面提供了指向更多项目的链接,以及相关的论文和信息:https://janzhou.org/lsh/