蓄水池抽样算法及其python实现

本文介绍了蓄水池抽样算法,该算法用于从大量数据中进行等概率抽样。算法流程包括创建初始容量为k的蓄水池,随后遍历输入数组,按一定概率替换蓄水池中的元素。文章提供了Python实现代码,并通过实验验证了算法的准确性,确保了抽样结果的等概率性。
摘要由CSDN通过智能技术生成

蓄水池抽样算法

蓄水池抽样是个很有趣的问题,这个问题的来源是关于等概率抽样的一种思考,问题是,如何能在不知道总体对象数量(或者数量巨大)的情况下抽取k个对象,使得每个对象被抽取到的概率相同。
解决问题的思路:考虑最终一定要抽取到k个对象,所以先任意抽出k个,然后对剩下的对象分别以某种概率概率,使得最终每个对象被抽到的概率相同。(根据分步分类计数原理即可证明)

算法流程:

  1. 输入:长度为N的数组L(N未知或者很大);输出:被等可能抽出的长度为k的数组l
  2. 对输入L取前k个数组成的数组作为蓄水池
  3. 对于L的第i(i=k+1,k+2,…,N)个数,任取r为0~i-1之间的整数,若r>k-1,则不进行替换,若r<=k-1,则用第i个数去替换蓄水池中第r个数
  4. 遍历一遍L,取到的l中的每个元素都是以概率k/n等可能取到的

python实现如下:

#coding=utf-8
'''
Created on 2016年9月15日
Reservoir sampling的python实现
@author: whz
'''
import numpy 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值