等概率整群抽样与多阶段抽样

本文探讨了等概率抽样、整群抽样、多阶段抽样和水塘抽样的概念,重点介绍了水塘抽样在大规模数据集中的应用,以及其如何通过节省时间和内存实现高效随机选取。通过伪代码展示了如何利用水塘抽样算法来处理大规模链表问题,确保样本均匀且概率相等。

概念

  • 等概率抽样

    抽样方法的一大类,指总体中的每个个体被抽中的概率相等

  • 整群抽样

    把总体划分为群,抽样时只需要群的抽样框,对群内所有单位进行抽样调查。

    优点:由于只需要群的抽样框,简化了编制抽样框的工作量

    缺点:估计精度较差,因为同一群内的单元比较相似,在样本量相同的情况下,抽样误差较大

  • 多阶段抽样

    类似整群抽样,首先抽取群,但不是调查群内的所有基本单元,而是进一步抽样,从群中选择若干个基本单元进行调查。例如,第一阶段抽取初级单元,第二阶段抽取二级单元,第三阶段抽取接受调查的基本单元就是三阶段抽样。但一般会尽可能减少抽取样本的阶段,每增加一个抽样阶段就会增添一份抽样误差,对总体的估计也会更加复杂。

    优点:保证了样本相对集中,节约调查费用,不需要包含所有低阶段抽样单元的抽样框。在较大规模的抽样调查中经常使用。

    往往现实生活中,更多的是使用多阶段抽样。

水塘抽样

https://www.cnblogs.com/krcys/p/9121487.html

在等概率多阶段抽样的实现过程中,对于大规模的数据集,为了节省时间和内存消耗,此时使用水塘抽样算法是一个不错的选择。

例题

有一个长度为N的链表,N的值非常大,我不清楚N的确切值。我怎样能写一个尽可能高效地算法来返回K个完全随机的数。

限制
  1. 高效且节省内存使用
  2. 尽量随机返回值
设定

S[N]记作样本集合、R[K]记作结果集合、N记作S的数组大小、J记作每次的随机数、K记作前K个随机数、i为迭代次数

步骤
  1. 取S集合中前K个数填入集合R
  2. 从S[K]开始遍历
    生成随机数J,范围是[0,K+i-1],因为i从0开始
    若J<K,则替换R中的值,即R[j]=S[i]
  3. 遍历结束,生成结果数组R

伪代码如下:

# 1. 取S集合中前K个数填入集合R
for i = 0 to K-1
	R[i] <- S[i]
end

# 2. 从S[K]开始遍历, 生成随机数J,范围是[0,K+i-1], 若J<K,则替换R中的值,即R[j]=S[i]
for i = K to N-1
	j = random(0,i)
	if j<K
		R[j] = S[i]
	end
end
复杂度分析

可以上面步骤看得出来,只利用了一个for循环,时间复杂度为O(N),而for内部仅仅利用了K个空间进行存储,因此空间复杂度为O(K),从而极大地节省时间和内存。

等概率?

在循环中第n行被抽取的概率为k/n,用Pn表示,而总数一共为N的话,任意第n行的被抽取的概率为:

HwJXy4.png

因此,我们求出每个样本被抽取的概率是相同的,均为k/N.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的风666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值