概念
-
等概率抽样
抽样方法的一大类,指总体中的每个个体被抽中的概率相等
-
整群抽样
把总体划分为群,抽样时只需要群的抽样框,对群内所有单位进行抽样调查。
优点:由于只需要群的抽样框,简化了编制抽样框的工作量
缺点:估计精度较差,因为同一群内的单元比较相似,在样本量相同的情况下,抽样误差较大
-
多阶段抽样
类似整群抽样,首先抽取群,但不是调查群内的所有基本单元,而是进一步抽样,从群中选择若干个基本单元进行调查。例如,第一阶段抽取初级单元,第二阶段抽取二级单元,第三阶段抽取接受调查的基本单元就是三阶段抽样。但一般会尽可能减少抽取样本的阶段,每增加一个抽样阶段就会增添一份抽样误差,对总体的估计也会更加复杂。
优点:保证了样本相对集中,节约调查费用,不需要包含所有低阶段抽样单元的抽样框。在较大规模的抽样调查中经常使用。
往往现实生活中,更多的是使用多阶段抽样。
水塘抽样
https://www.cnblogs.com/krcys/p/9121487.html
在等概率多阶段抽样的实现过程中,对于大规模的数据集,为了节省时间和内存消耗,此时使用水塘抽样算法是一个不错的选择。
例题
有一个长度为N的链表,N的值非常大,我不清楚N的确切值。我怎样能写一个尽可能高效地算法来返回K个完全随机的数。
限制
- 高效且节省内存使用
- 尽量随机返回值
设定
S[N]记作样本集合、R[K]记作结果集合、N记作S的数组大小、J记作每次的随机数、K记作前K个随机数、i为迭代次数
步骤
- 取S集合中前K个数填入集合R
- 从S[K]开始遍历
生成随机数J,范围是[0,K+i-1],因为i从0开始
若J<K,则替换R中的值,即R[j]=S[i] - 遍历结束,生成结果数组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行的被抽取的概率为:
因此,我们求出每个样本被抽取的概率是相同的,均为k/N.
本文探讨了等概率抽样、整群抽样、多阶段抽样和水塘抽样的概念,重点介绍了水塘抽样在大规模数据集中的应用,以及其如何通过节省时间和内存实现高效随机选取。通过伪代码展示了如何利用水塘抽样算法来处理大规模链表问题,确保样本均匀且概率相等。


2027

被折叠的 条评论
为什么被折叠?



