Java 数千个大型数据集的Jaccard相似算法 我需要什么
我正在寻找一种非常快速和准确的方法,在多个庞大的数据集之间找到Jaccard相似性。我可以进行多达10.000-20.000次计算Jaccard相似性的操作。由于需要在转储这些数据集之后计算所有Jaccard相似性,所以我无法在安静的冬夜用缓慢的算法在后台计算它们 我认为有两种可能的解决办法: 解决方案#1 使用MinHash算法。这个解决方案的问题是速度非常慢。要获得10%的错误,需要使用100个哈希函数。我在这里看到的唯一解决方法是使用单个“昂贵”哈希函数对所有内容进行哈希,而不是在哈希结果上使用100个“廉价”哈希函数。但是我没有足够的数学背景自己选择它们 问题#1 如何为MinHash选择速度高效的哈希函数集以获得最大错误10% 解决方案#2 使用HyperLogLog或位集计算Jaccard相似性Java 数千个大型数据集的Jaccard相似算法 我需要什么,java,algorithm,hash,bitset,cardinality,Java,Algorithm,Hash,Bitset,Cardinality,我正在寻找一种非常快速和准确的方法,在多个庞大的数据集之间找到Jaccard相似性。我可以进行多达10.000-20.000次计算Jaccard相似性的操作。由于需要在转储这些数据集之后计算所有Jaccard相似性,所以我无法在安静的冬夜用缓慢的算法在后台计算它们 我认为有两种可能的解决办法: 解决方案#1 使用MinHash算法。这个解决方案的问题是速度非常慢。要获得10%的错误,需要使用100个哈希函数。我在这里看到的唯一解决方法是使用单个“昂贵”哈希函数对所有内容进行哈希,而不是在哈希结果
这种方法的问题在于。位集(即使是稀疏的数据结构)的另一个问题是它在更大的数据集上占用了太多的RAM 我的算法:
set1的可能基数
set2的可能基数
set1并集set2
的可能基数。HyperLogLog和位集都支持合并操作set2
和set1
=(基数(set1)+基数(set2)-基数(set1联合set2))/cardinality(set2)
2) 如中所述,位集实际上是HyperLogLog草图的特例。本文还描述了一种最大似然法,该方法允许更精确地估计两个HyperLogLog草图的并集和交点大小,可用于最终获得Jaccard相似性的估计。您的集合有多大?什么是集合元素?(整数/单词/令牌?)有多少组?@joop我正在编写一个应用程序,它将接受用户的数据。数据集实际上是数据库表的列,其中数据库由用户提供。因此,数据集可以是1000到10亿行,其中包含任何数据。一个问题不应该包含一个问题,而应该包含多个问题吗?@GhostCat听起来像是“请帮助我让一切正常工作”。我试图向你解释我的解决方法和我面临的问题。这个问题可以用多种方式解决,因此它包含了多种问题