背景
大数据抽样或者对或者数据流是连续不断的情况进行抽样,数据量远超内存,如何以相同的概率抽样呢?即每个样本被抽到的概率一样
方法
设采样数量为 k,遍历大数据 N(总数为 n),先取出前 k 个数据放到采样池(池子的容量为k),当遍历道第i个数据时,以 k / i 的概率放到采样池随机替换其中一个,如此一直到遍历结束
原理推导
这种采样方法怎么实现每个样本的被采样概率为 k/n的?
根据采样方法,知道遍历到第i个样本时,这个样本被采样的概率是 k/i,我们只需要证明此时池子里的任意一个被采样的概率也是 k/i 即可,这个概率应该是第i个样本不入采样池的的概率加上入池但不被替换的概率,下面从第 k+1 个的被采样开始算,其被采样的概率如下:
$$
P(k+1)=1-\frac{k}{k+1}+\frac{k}{k+1}\times(1-\frac{1}{k})=\frac{k}{k+1}
$$
遍历到第k+2个:
$$
p(k+2)=p(k+1)\times(1-\frac{k}{k+2}+\frac{k}{k+2}\times(1-\frac{1}{k}))=\frac{k}{k+2}
$$
分子不变,分母为第i个样本的i,容易归纳得出
$$
p(n)=\frac{k}{n}
$$
遍历结束,这样样本的被采样概率如上。
采样方法是有序的遍历操作,但实际上样本是无序的,即无论样本在第几个被遍历到的,它的被采样概率都是 k/n