標籤:

大數據計數原理1+0=1這你都不會算(七)No.59

今天的乾貨,不是一般的干,噎死人那種干。沒下面這些準備的話直接退出吧,回去度娘啊谷哥啊弄懂是什麼東西再回來。

知識儲備必須有這些:

BitMap知識。概率論二項分布。泰勒展開。函數求極限。求期望值。求方差、標準差。log對數變換。極大似然估計。


照例甩一波鏈接。

大數據計數原理1+0=1這你都不會算(一)No.47 <- HashSet

大數據計數原理1+0=1這你都不會算(二)No.50 <- BitMap

大數據計數原理1+0=1這你都不會算(三)No.51 <- BloomFilter

大數據計數原理1+0=1這你都不會算(四)No.52 <- B-Tree

大數據計數原理1+0=1這你都不會算(五)No.55 <- B+Tree

大數據計數原理1+0=1這你都不會算(六)No.57 <- LinearCounting(一)


來了喔。

真的來了喔。

我們先定義幾個代數。

整個BitMap 有m個坑,還要有u個坑還沒被占。我們已經假設了值經過 Hash 後近似服從獨立均勻分布。

對事件進行定義:

A = 「經過n個元素進行Hash後,第j個桶值為0」

則A出現的概率如上。意思就是坑為1的概率都是1/m,那麼坑為0的概率為 (1 - 1/m),如此重複n次 ,就得到上面的式子了。

又因為每個桶都是獨立的,所以整個BitMap的期望值為A的概率直接乘以m。

做一個小小的trick(小把戲)變換,也就是強行把內部滿足某個求極限的式子。喏,這個。

當m和n都趨向於無窮大的時候,求一下極限,就得到了這個

這個是有u個坑的估計,而我們想知道的是基數n,做一下log變換。

根據極大似然估計的判定定理。

既然

是可逆的,那麼這樣我們就得到了下面這個估計了。

好了,剛剛我們已經得到期望,現在我們求一下方差和比率t的方差和期望,後面有用,至於怎麼求的,自行找一下怎麼求。

我們定義一下函數f。

然後對進行泰勒展開,得到下面這串玩意。

取前三項。原論文里說,因為第二項展開的期望為0,所以保留前三項,求期望得到

代入前面求到的期望值,化簡可以得到。

所以直接除於n,可以得到偏差比率為:

至此,偏差比率的推導就完成啦,能看到這裡的都是大神,說實話。

那標準差又是怎麼樣的呢?

還是它,泰勒展開。

這裡啟發性地取前兩項。

一步一步推導下來,再配合前面求的方差,嗯相信你可以的。

所以標準差就是這樣。

至此,原理,偏差率,標準差都推導完畢,但是還有一點點問題。就是,這樣去算有什麼條件呢,對於m的取值?啟發性地取泰勒展開前三項和前兩項又分別代表什麼?這個大家自己去論文看,我要是開心,我可能也會說說看。

是不是很乾貨?我也知道很乾,但是真的要細細閱讀,讀完最好搭配上原始論文好好看一下,我看了蠻久的說實話。

好了睡覺了。要是覺得很乾就點個贊吧,讓我知道還有人在看。


推薦閱讀:

用Apache Spark進行大數據處理——第一部分:入門介紹
大數據計數原理1+0=1這你都不會算(九)No.64
堆內和堆外
大數據計數原理1+0=1這你都不會算(六)No.57
大數據架構師技能

TAG:大數據 |