码迷,mamicode.com
首页 > 其他好文 > 详细

数据流基本问题--矩估计

时间:2015-05-26 21:30:39      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:数据流   矩估计   中位数   

在前面我们谈到了独立元素计数的问题。在本文中,我们将独立元素计数问题推广到更一般的问题,也就是矩估计问题。我们将先介绍矩的定义,然后介绍一个无偏的估计方法,最后介绍如何改进结果。这里还是讨论内存容量不够的情况。

一、矩估计

如果一个数据流技术分享,其中m为数据流的大小,技术分享。我们可以定义每个元素

出现的次数技术分享,其中技术分享为第i个元素出现的次数。则流的k阶矩(k-th moment)技术分享是所有技术分享出现次数技术分享取k次方技术分享的和。

技术分享

下面我们看看k的一些特殊取值。

1.如果k=0时,技术分享,所以0阶矩技术分享就是数据流中独立元素数目,我们可以使用前面

博客中的方法进行估计。

2.如果k=1时,技术分享就是流中所有元素出现次数之和,其实也就是流的总长度m。所以1阶矩的计算非常容易。

3.如果K=2时,技术分享的计算相对来说麻烦一些。二阶矩度量的是流中元素分布的均匀性。如果我们有个长度为100的流,

其中不同的元素个数为11个。最均匀的分布就是:其中10个元素出现9次,1个元素出现10次,这时二阶矩为910。

反,另一种极端情况是一个元素出现了90次,其余10个元素各出现1次,此时二阶矩为8110。

二、具体算法

这里给出的算法非常简单,但是计算结果仍然是技术分享的无偏估计。

算法的具体过程就是从流中随机选取一个位置,该位置元素为a。统计数据流的总长度m,还有数据流在选取位置后a的出现次数r。则最终的估计值为技术分享

这里有个问题就是,在处理数据流之前我们并不知道m的取值,此时如何从流中随机选取一个位置呢?这就涉及到我们之前讲的蓄水池抽样算法(具体可以参见之前的博客)。该随机选取位置的步骤具体体现在算法的第二步。

技术分享

三、算法的评估

这种算法不是该问题的最优算法,但是最容易理解和分析的。我们先对算法的产生结果是技术分享的无偏估计进行证明。该算法其实相当于两步:

1.选取一个任意元素a,技术分享,a为j的概率为技术分享

2.然后选取a出现的某个位置,并统计此位置后a的出现次数。

假设A和R分别是算法中a和r的取值,X为算法的输出结果。

技术分享

故有:

技术分享

所以得证X就是技术分享的无偏估计。

我们还可以证明X的方差满足下面公式:

技术分享

四、改进方法

这里我们无法像之前几篇博客里直接使用median trick。因为直接估计的方差比较大,无法保证最终结果偏离真实值技术分享的概率低于1/2。我们先运行1组结果,一组内运行多次结果,取均值,这样可以将方差降下来。然后重复多次,再取均值的中位数,这样就可以把偶然因素的影响降低到几乎没有的地步。

该方法有个定理做理论保证。

假设X是Q的一个无偏估计,技术分享之间相互独立,且和X的分布相同。另外,技术分享技术分享。令技术分享,则技术分享






数据流基本问题--矩估计

标签:数据流   矩估计   中位数   

原文地址:http://blog.csdn.net/dm_ustc/article/details/46011557

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!