python按指定概率抽样_概率加权的随机抽样 (Weighted Random Sampling) – A-Res 蓄水池算法...
时间: 2024-03-21 12:37:43 浏览: 153
可以使用A-Res蓄水池算法来实现概率加权的随机抽样。该算法的基本思想是通过一个动态的蓄水池来实现随机抽样。具体实现步骤如下:
1. 对样本进行编号,并计算每个样本的权重。
2. 初始化一个大小为k的蓄水池,将前k个样本放入蓄水池中。
3. 对于第i个样本(i > k),以概率k/i将其放入蓄水池中,同时随机选择一个蓄水池中的样本将其替换。
4. 重复步骤3直到遍历完所有样本。
5. 最终蓄水池中的k个样本即为概率加权的随机抽样结果。
下面是一个Python实现示例:
```python
import random
def weighted_random_sampling(data, k):
n = len(data)
weights = [data[i][1] for i in range(n)]
samples = [data[i][0] for i in range(n)]
reservoir = samples[:k]
for i in range(k, n):
p = k / (i + 1)
if random.random() < p:
j = random.randint(0, k - 1)
reservoir[j] = samples[i]
return reservoir
```
其中,data为样本列表,每个元素为一个二元组(样本,权重),k为抽样数量。函数返回抽样结果列表。
阅读全文