UTF8gbsn
背景
如果我们想得到一个长度为n样本空间中的m个采样。我们一般的做法是对 1 , 2 , . . . , n 1,2,...,n 1,2,...,n进行洗牌。然后选中前面m个元素作为采样样本。比如
A [ n ] = { 3 , 4 , 2 , 6 , 8 , 10 } , n = 6 A[n]=\{3,4,2,6,8,10\}, n=6 A[n]={3,4,2,6,8,10},n=6.如果我们想要采样出 m = 3 m=3 m=3个样本。
-
对 { 1 , 2 , 3 , 4 , 5 , 6 } \{1,2,3,4,5,6\} {1,2,3,4,5,6}进行shuffle洗牌。
-
假如结果是 { 3 , 4 , 5 , 2 , 1 , 6 } \{3,4,5,2,1,6\} {3,4,5,2,1,6}那么。我们只取前面 m = 3 m=3 m=3个元素 { 3 , 4 , 5 } \{3,4,5\} {3,4,5}作为样本坐标。
-
返回结果 A [ 3 ] , A [ 4 ] , A [ 5 ] A[3],A[4],A[5] A[3],A[4],A[5]是为结果。
当然还有一个更好的采样算法,这里不在介绍。可以参考《算法导论》英文第三版5.3-7题目
关于n未知的问题
如果我们的数据是不断的到达。事先我们并不知道n多大。那么怎么进行采样m个元素呢?答案是使用蓄水池采样。那么什么是蓄水池采样?我们先来描述一下蓄水池采样算法。
-
首先假设数据按顺序不断到达A[1…n],注意n未知。
-
前面m个数据直接进入蓄水池数列P[1…m]=A[1…m].
-
如果是m+k个元素 k = 1 , 2 , . . . k=1,2,... k=1,2,... i = R a n d o m ( 1 , m + k ) i = Random(1, m+k) i=Random(1,m+k)
如果 k ∈ { 1 , 2 , . . . , m } k\in \{1,2,...,m\} k∈{1,2,...,m}, P[k]=A[m+k],如果不是,什么也不做。
这就是蓄水池算法。
概率分析
我们要证明一件事情就是对于任意大的 n ⩾ m n\geqslant m n⩾m,每一个元素进入蓄水池 P [ 1... m ] P[1...m] P[1...m]的概率都是 m / n m/n m/n.
from 1 to m
先分析前面m个元素最终进入蓄水池的概率。
-
把数列 A [ 1... n ] A[1...n] A[1...n]分成两部分 A [ 1... m ] , A [ m + 1... n ] A[1...m], A[m+1...n] A[1...m],A[m+1...n]
-
那么 A [ 1... m ] A[1...m] A[1...m]最终留在蓄水池中的概率,等于从 A [ m + 1 ] A[m+1] A[m+1]到 A [ n ] A[n] A[n]不被换出的概率。因为 A [ 1... m ] A[1...m] A[1...m]必定进入蓄水池。但是可能被后面的元素换出去。
-
从 m + 1 m+1 m+1开始分析直到 n n n
-
B(X)表示,A[1…m]中的元素 X X X被换出的概率
B ( x ) = 1 m + 1 + m m + 1 1 m + 2 + m m + 1 m + 1 m + 2 1 m + 3 + m m + 1 m + 1 m + 2 m + 2 m + 3 1 m + 4 + . . . B(x)=\frac{1}{m+1}+\frac{m}{m+1}\frac{1}{m+2}+\frac{m}{m+1}\frac{m+1}{m+2}\frac{1}{m+3}+\frac{m}{m+1}\frac{m+1}{m+2}\frac{m+2}{m+3}\frac{1}{m+4}+... B(x)=m+11+m+1mm+21+m+1mm+2m+1m+31+m+1mm+2m+1m+3m+2m+41+...
化简一下可得 B ( x ) = 1 − m n B(x)=1-\frac{m}{n} B(x)=1−nm -
N(X)用来表示A[1…m]中的元素X不被换出的概率
N ( X ) = 1 − B ( X ) = 1 − ( 1 − m n ) = m / n N(X)=1-B(X)=1-(1-\frac{m}{n})=m/n N(X)=1−B(X)=1−(1−nm)=m/n
-
-
最终可得A[1…m]元素最终留在蓄水池中的概率为 m n \frac{m}{n} nm
From m+1 to n
这些元素最终留在蓄水池的概率为多少呢?不失去一般性我们证明元素m+k留在蓄水池中的概率。
-
首先m+k号元素必须先进入蓄水池 m m + k \frac{m}{m+k} m+km
-
从m+k+1元素开始的元素都不换出它。还是先计算换出的概率B(X)
B ( X ) = 1 m + k + 1 + m + k m + k + 1 1 m + k + 2 + m + k m + k + 1 m + k − 1 m + k + 2 1 m + k + 3 + . . . B(X)=\frac{1}{m+k+1}+\frac{m+k}{m+k+1}\frac{1}{m+k+2}+\frac{m+k}{m+k+1}\frac{m+k-1}{m+k+2}\frac{1}{m+k+3}+... B(X)=m+k+11+m+k+1m+km+k+21+m+k+1m+km+k+2m+k−1m+k+31+...
化简得
B ( X ) = 1 m + k + 1 + ( m + k ) ( 1 m + k + 1 − 1 n ) = 1 m + k + 1 + m + k m + k + 1 − m + k n B(X)=\frac{1}{m+k+1}+(m+k)(\frac{1}{m+k+1}-\frac{1}{n})=\frac{1}{m+k+1}+\frac{m+k}{m+k+1}-\frac{m+k}{n} B(X)=m+k+11+(m+k)(m+k+11−n1)=m+k+11+m+k+1m+k−nm+k
B ( X ) = 1 − m + k n B(X)=1-\frac{m+k}{n} B(X)=1−nm+k 不换出的概率为 1 − B ( X ) = m + k n 1-B(X)=\frac{m+k}{n} 1−B(X)=nm+k -
最后来计算m+k进入蓄水池的概率为
m m + k × m + k n = m n \frac{m}{m+k}\times \frac{m+k}{n}=\frac{m}{n} m+km×nm+k=nm
conclusion
最终所有元素进入蓄水池的概率均为
m n \mathbf{\frac{m}{n}} nm