1. 程式人生 > >解讀Cardinality Estimation演算法(第四部分:HyperLogLog Counting)

解讀Cardinality Estimation演算法(第四部分:HyperLogLog Counting)

前一篇文章中,我們瞭解了LogLog Counting。LLC演算法的空間複雜度為O(log2(log2(Nmax))),並且具有較高的精度,因此非常適合用於大資料場景的基數估計。不過LLC也有自己的問題,就是當基數不太大時,估計值的誤差會比較大。這主要是因為當基數不太大時,可能存在一些空桶,這些空桶的ρmaxρmax為0。由於LLC的估計值依賴於各桶ρmax的幾何平均數,而幾何平均數對於特殊值(這裡就是指0)非常敏感,因此當存在一些空桶時,LLC的估計效果就變得較差。

這一篇文章中將要介紹的HyperLogLog Counting及Adaptive Counting演算法均是對LLC演算法的改進,可以有效克服LLC對於較小基數估計效果差的缺點。

評價基數估計演算法的精度

首先我們來分析一下LLC的問題。一般來說LLC最大問題在於當基數不太大時,估計效果比較差。上文說過,LLC的漸近標準誤差為這裡寫圖片描述,看起來貌似只和分桶數m有關,那麼為什麼基數的大小也會導致效果變差呢?這就需要重點研究一下如何評價基數估計演算法的精度,以及“漸近標準誤差”的意義是什麼。

標準誤差

首先需要明確標準誤差的意義。例如標準誤差為0.02,到底表示什麼意義。

這裡寫圖片描述
這裡寫圖片描述

組合計數與漸近分析

這裡寫圖片描述

Adaptive Counting

Adaptive Counting(簡稱AC)在“Fast and accurate traffic matrix measurement using adaptive cardinality counting”一文中被提出。其思想也非常簡單直觀:實際上AC只是簡單將LC和LLC組合使用,根據基數量級決定是使用LC還是LLC。具體是通過分析兩者的標準差,給出一個閾值,根據閾值選擇使用哪種估計。

基本演算法

這裡寫圖片描述
這裡寫圖片描述

誤差分析

因為AC只是LC和LLC的簡單組合,所以誤差分析可以依照LC和LLC進行。值得注意的是,當β<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使用調和平均數來代替幾何平均數,調和平均數的定義如下:

這裡寫圖片描述

偏差分析

這裡寫圖片描述

分段偏差修正

這裡寫圖片描述

小結

本文首先介紹了基數估計演算法標準誤差的意義,並據此說明了為什麼LLC在基數較小時效果不好。然後,以此介紹了兩種對LLC的改進演算法:HyperLogLog Counting及Adaptive Counting。到此為止,常見的四種基數估計演算法就介紹完了。