HyperLogLog Counting

在上文中,我们了解了LogLog Counting。LLC算法的空间复杂度为 O(log2(log2(Nmax))) O(log2(log2(Nmax))),并且具有较高的精度,因此非常适合用于大数据场景的基数估计。不过LLC也有自己的问题,就是当基数不太大时,估计值的误差会比较大。这主要是因为当基数不太大时,可能存在一些空桶,这些空桶的 ρmax ρmax为0。由于LLC的估计值依赖于各桶 ρmax ρmax的几何平均数,而几何平均数对于特殊值(这里就是指0)非常敏感,因此当存在一些空桶时,LLC的估计效果就变得较差。

这一篇文章中将要介绍的HyperLogLog Counting及Adaptive Counting算法均是对LLC算法的改进,可以有效克服LLC对于较小基数估计效果差的缺点。

评价基数估计算法的精度

首先我们来分析一下LLC的问题。一般来说LLC最大问题在于当基数不太大时,估计效果比较差。上文说过,LLC的渐近标准误差为 1.30/m 1.30/m,看起来貌似只和分桶数m有关,那么为什么基数的大小也会导致效果变差呢?这就需要重点研究一下如何评价基数估计算法的精度,以及“渐近标准误差”的意义是什么。

标准误差

首先需要明确标准误差的意义。例如标准误差为0.02,到底表示什么意义。

标准误差是针对一个统计量(或估计量)而言。在分析基数估计算法的精度时,我们关心的统计量是 n^/n n^/n。注意这个量分子分母均为一组抽样的统计量。下面正式描述一下这个问题。

设S是我们要估计基数的可重复有限集合。S中每个元素都是来自值服从均匀分布的样本空间的一个独立随机抽样样本。这个集合共有C个元素,但其基数不一定是C,因为其中可能存在重复元素。设 fn fn为定义在S上的函数:

fn(S)=CardinalityofS fn(S)=CardinalityofS

同时定义 fn^ fn^也是定义在S上的函数:

fn^(S)=LogLogestimatevalueofS fn^(S)=LogLogestimatevalueofS

我们想得到的第一个函数值,但是由于第一个函数值不好计算,所以我们计算同样集合的第二个函数值来作为第一个函数值得估计。因此最理想的情况是对于任意一个集合两个函数值是相等的,如果这样估计就是100%准确了。不过显然没有这么好的事,因此我们退而求其次,只希望 fn^(S) fn^(S)是一个无偏估计,即:

E(fn^(S)fn(S))=1 E(fn^(S)fn(S))=1

这个在上一篇文章中已经说明了。同时也可以看到, fn^(S)fn(S) fn^(S)fn(S)实际上是一个随机变量,并且服从正态分布。对于正态分布随机变量,一般可以通过标准差 σ σ度量其稳定性,直观来看,标准差越小,则整体分布越趋近于均值,所以估计效果就越好。这是定性的,那么定量来看标准误差 σ σ到底表达了什么意思呢。它的意义是这样的:

对于无偏正态分布而言,随机变量的一次随机取值落在均值一个标准差范围内的概率是68.2%,而落在两个和三个标准差范围内的概率分别为95.4%和99.6%,如下图所示(图片来自维基百科):

因此,假设标准误差是0.02(2%),它实际的意义是:假设真实基数为n,n与估计值之比落入(0.98, 1.02)的概率是68.2%,落入(0.96, 1.04)的概率是95.4%,落入(0.94, 1.06)的概率是99.6%。显然这个比值越大则估计值越不准,因此对于0.02的标准误差,这个比值大于1.06或小于0.94的概率不到0.004。

再直观一点,假设真实基数为10000,则一次估计值有99.6%的可能不大于10600且不小于9400。

组合计数与渐近分析

如果LLC能够做到绝对服从 1.30/m 1.30/m,那么也算很好了,因为我们只要通过控制分桶数m就可以得到一个一致的标准误差。这里的一致是指标准误差与基数无关。不幸的是并不是这样,上面已经说过,这是一个“渐近”标注误差。下面解释一下什么叫渐近。

在计算数学中,有一个非常有用的分支就是组合计数。组合计数简单来说就是分析自然数的组合函数随着自然数的增长而增长的量级。可能很多人已经意识到这个听起来很像算法复杂度分析。没错,算法复杂度分析就是组合计数在算法领域的应用。

举个例子,设A是一个有n个元素的集合(这里A是严格的集合,不存在重复元素),则A的幂集(即由A的所有子集组成的集合)有 2n 2n个元素。

上述关于幂集的组合计数是一个非常整齐一致的组合计数,也就是不管n多大,A的幂集总有 2n 2n个元素。

可惜的是现实中一般的组合计数都不存在如此干净一致的解。LLC的偏差和标准差其实都是组合函数,但是论文中已经分析出,LLC的偏差和标准差都是渐近组合计数,也就是说,随着n趋向于无穷大,标准差趋向于 1.30/m 1.30/m,而不是说n多大时其值都一致为 1.30/m 1.30/m。另外,其无偏性也是渐近的,只有当n远远大于m时,其估计值才近似无偏。因此当n不太大时,LLC的效果并不好。

庆幸的是,同样通过统计分析方法,我们可以得到n具体小到什么程度我们就不可忍受了,另外就是当n太小时可不可以用别的估计方法替代LLC来弥补LLC这个缺陷。HyperLogLog Counting及Adaptive Counting都是基于这个思想实现的。

Adaptive Counting

Adaptive Counting(简称AC)在“Fast and accurate traffic matrix measurement using adaptive cardinality counting”一文中被提出。其思想也非常简单直观:实际上AC只是简单将LC和LLC组合使用,根据基数量级决定是使用LC还是LLC。具体是通过分析两者的标准差,给出一个阈值,根据阈值选择使用哪种估计。

基本算法

如果分析一下LC和LLC的存储结构,可以发现两者是兼容的,区别仅仅在于LLC关心每个桶的 ρmax ρmax,而LC仅关心此桶是否为空。因此只要简单认为 ρmax ρmax值不为0的桶为非空,0为空就可以使用LLC的数据结构做LC估计了。

而我们已经知道,LC在基数不太大时效果好,基数太大时会失效;LLC恰好相反,因此两者有很好的互补性。

回顾一下,LC的标准误差为:

SElc(n^/n)=ett1/(tm) SElc(n^/n)=et−t−1/(tm)

LLC的标准误差为:

SEllc(n^/n)=1.30/m SEllc(n^/n)=1.30/m

将两个公式联立:

ett1/(tm)=1.30/m et−t−1/(tm)=1.30/m

解得 t2.89 t≈2.89。注意m被消掉了,说明这个阈值与m无关。其中 t=n/m t=n/m

β β为空桶率,根据LC的估算公式,带入上式可得:

β=et0.051 β=e−t≈0.051

因此可以知道,当空桶率大于0.051时,LC的标准误差较小,而当小于0.051时,LLC的标准误差较小。

完整的AC算法如下:

n^={αmm21mMmlog(β)ifif0β<0.0510.051β1 n^={αmm21m∑Mif0≤β<0.051−mlog(β)if0.051≤β≤1

误差分析

因为AC只是LC和LLC的简单组合,所以误差分析可以依照LC和LLC进行。值得注意的是,当 β<0.051 β<0.051时,LLC最大的偏差不超过0.17%,因此可以近似认为是无偏的。

HyperLogLog Counting

HyperLogLog Counting(以下简称HLLC)的基本思想也是在LLC的基础上做改进,不过相对于AC来说改进的比较多,所以相对也要复杂一些。本文不做具体细节分析,具体细节请参考“HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm”这篇论文。

基本算法

HLLC的第一个改进是使用调和平均数替代几何平均数。注意LLC是对各个桶取算数平均数,而算数平均数最终被应用到2的指数上,所以总体来看LLC取得是几何平均数。由于几何平均数对于离群值(例如这里的0)特别敏感,因此当存在离群值时,LLC的偏差就会很大,这也从另一个角度解释了为什么n不太大时LLC的效果不太好。这是因为n较小时,可能存在较多空桶,而这些特殊的离群值强烈干扰了几何平均数的稳定性。

因此,HLLC使用调和平均数来代替几何平均数,调和平均数的定义如下:

H=n1x1+1x2+...+1xn=nni=11xi H=n1x1+1x2+...+1xn=n∑i=1n1xi

调和平均数可以有效抵抗离群值的扰动。使用调和平均数代替几何平均数后,估计公式变为如下:

n^=αmm22M n^=αmm2∑2−M

其中:

αm=(m0(log2(2+u1+u))mdu)1 αm=(m∫0∞(log2(2+u1+u))mdu)−1

偏差分析

根据论文中的分析结论,与LLC一样HLLC是渐近无偏估计,且其渐近标准差为:

SEhllc(n^/n)=1.04/m SEhllc(n^/n)=1.04/m

因此在存储空间相同的情况下,HLLC比LLC具有更高的精度。例如,对于分桶数m为2^13(8k字节)时,LLC的标准误差为1.4%,而HLLC为1.1%。

分段偏差修正

在HLLC的论文中,作者在实现建议部分还给出了在n相对于m较小或较大时的偏差修正方案。具体来说,设E为估计值:

E52m E≤52m时,使用LC进行估计。

52m<E130232 52m<E≤130232是,使用上面给出的HLLC公式进行估计。

E>130232 E>130232时,估计公式如为 n^=232log(1E/232) n^=−232log(1−E/232)

关于分段偏差修正效果分析也可以在原论文中找到。

小结

本文首先介绍了基数估计算法标准误差的意义,并据此说明了为什么LLC在基数较小时效果不好。然后,以此介绍了两种对LLC的改进算法:HyperLogLog Counting及Adaptive Counting。到此为止,常见的四种基数估计算法就介绍完了。

### 回答1: yolov5 counting是一种基于yolov5模型实现的目标计数技术。作为计算机视觉领域的一项重要任务,目标计数在许多应用中具有广泛的用途。yolov5是一种深度学习模型,其通过训练大量的图像数据和目标标注信息,能够自动识别和定位图像中的不同目标,并进行准确的计数。 yolov5 counting的实现过程可以大致分为以下几个步骤。首先需要收集并标注大量的图像数据集,以供训练模型使用。这些标注信息通常包括目标的位置、类别、数量等。然后,使用yolov5这个强大的深度学习模型,通过对训练数据的反复学习和优化,使其能够准确地识别和计数不同的目标。 在目标计数任务中,yolov5 counting的工作原理是基于目标检测的。它首先在输入的图像中检测出所有的目标,然后对它们进行分类,并记录下每个类别的数量。通过这种方式,我们可以实现对不同目标的计数。与传统的目标计数方法相比,yolov5 counting具有高准确性和高效性的特点,能够在较短的时间内实现大规模图像数据的目标计数。 除了在实际应用中进行目标计数之外,yolov5 counting还可以用于其他领域的研究和开发中。例如,它可以用于交通流量监测、人群数量统计、工地安全监控等方面。通过对图像数据进行目标计数,我们可以获得更加详细和准确的信息,从而更好地了解和处理不同场景下的问题。 总之,yolov5 counting是一种基于yolov5模型的目标计数技术,它可以通过目标检测和分类的方式,准确地识别和计数图像中的目标。在计算机视觉和人工智能领域,yolov5 counting具有重要的研究和应用价值,将为我们带来更多的便利和效益。 ### 回答2: yolov5 counting 是一种基于深度学习的目标检测算法,主要用于检测并计数图片或视频中的不同种类的物体。 yolov5 counting 基于yolov5模型,采用了一种名为YOLO(You Only Look Once)的目标检测方法。与传统的目标检测算法相比,YOLO具有更快的检测速度和更高的精度。而yolov5 counting 是在yolov5的基础上进行了改进和优化,使其更加适合于物体计数任务。 yolov5 counting 使用深度卷积神经网络对输入的图片或视频进行分析,并将其中的物体进行检测和识别。它能够在一张图片中同时检测出多个物体,并根据物体的类别进行分类和计数。无论是人、车、动物还是其他物体,yolov5 counting 都能够准确地检测出来并进行计数。 yolov5 counting 的训练需要大量的标注数据和计算资源,它通过对训练集中的图片进行标注,并使用反向传播算法进行模型训练。训练完成后的模型可以用于对新的图片或视频进行目标检测和计数。 yolov5 counting 在许多领域都有广泛的应用,比如交通控制、人群管理、安防监控等。通过利用yolov5 counting ,我们可以实时地进行物体计数,从而帮助我们更好地理解和管理我们周围的环境。 ### 回答3: YOLOv5 counting是一种基于YOLOv5算法的目标计数方法。YOLOv5是一种高效的目标检测算法,它可以在图像或视频中实时地检测多个目标,并给出它们的坐标和类别。 在YOLOv5 counting中,我们首先将待计数的目标和背景提取出来。然后,利用YOLOv5模型对这些目标进行检测。检测到的目标会被标记上类别和位置信息。接下来,我们根据需要统计目标的数量。可以简单地根据检测到的目标数进行统计,也可以根据目标的类别进行区分。 YOLOv5 counting在很多领域中都有应用。例如,在人群管理中,可以利用YOLOv5 counting对人群数量进行实时监测和统计,以确保人群密度控制在安全范围内。在交通领域中,可以利用YOLOv5 counting对车辆进行计数,从而监测道路拥堵情况或者进行车流量统计。 总之,YOLOv5 counting是一种基于YOLOv5算法的目标计数方法。它可以快速、准确地对目标进行检测,并实时地统计目标的数量。这种方法在很多实际应用中非常有用,为我们提供了便利和帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值