解读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。到此為止,常見的四種基數估計算法就介紹完了。
總結
以上是生活随笔為你收集整理的解读Cardinality Estimation算法(第四部分:HyperLogLog Counting)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解读Cardinality Estima
- 下一篇: JQuery中checkbox勾选/取消