将HyperLogLog应用于总体样本

时间:2012-11-25 16:02:00

标签: algorithm estimation hyperloglog

HyperLogLog Flajolet等人的算法描述了一种估计基数的聪明方法 仅使用少量内存的集合。但是,确实需要考虑 在计算中考虑原始集合的所有N个元素。如果 我们只能获得原始N的一小部分随机样本(比方说,10%)吗? 是否有关于HyperLogLog或类似算法的研究 适应这种情况?

我知道这基本上是描述为 distinct的问题 值估计,存在大量研究(例如,参见this paper的概述)。然而, 我所知道的关于独特价值估计的研究使用了一个数字 ad-hoc估计器与HyperLogLog使用的方法非常不同。 因此,我想知道是否有人已经考虑过适应 HyperLogLog到明显的价值估计问题。

2 个答案:

答案 0 :(得分:8)

  

然而,我所知道的关于独特价值估计的研究   使用了许多与该方法截然不同的特别估计   由HyperLogLog使用。

是的,因为他们正在解决一个非常不同的问题。

假设您刚刚没收了1000,000美元的伪造钞票,并且您想知道不同序列号的数量。

采样100.000(使用HyperLogLog,因为您的古董蒸汽驱动计数机只有1k内存),您可以计算5000个不同的序列号,每个序列号大约发生20次。然后你可以非常肯定整个藏匿处只包含5000多个不同的序列号。

现在假设1个序列号出现95.001次,4999个序列号只出现一次。显然,一些真正的银行纸币进入你的藏匿处。现在你可以非常自信地藏匿了大约5%的诚实钞票,因此整个存储包含大约50.000个不同的序列号

请注意,样本中频率的分布用于推断整个存储中的分布情况。这实际上被称为second paper引用的“临时”(你的话)方法之一(“基于采样的不同值的数量估计(..)”):

  

参数估计器背后的想法是将概率分布拟合到   观察到不同属性值的相对频率。

另请注意,HyperLogLog和类似方法的结果对样本在其值上的分布完全不敏感。但你的最终估计显然在很大程度上取决于它!

我的建议:使用您选择的方法(如HyperLogLog)来计算样本中不同值的数量,然后使用“基于采样的估计”中的一种方法来估计您的整个多重集中的值的数量,或使用您的先前知识邻近多重集的分布来计算估计(也许您看到了造假者的印刷机,并且您知道它只能打印一个序列号)

答案 1 :(得分:1)

引文搜索是一件很棒的事情。我对这两个问题并不是很熟悉,所以这篇论文可能并不完全是你的意思。至少他们肯定会谈论HyperLogLog及其与问题的关系,所以也许它会满足你的好奇心。

An Optimal Algorithm for the Distinct Elements Problem