Python实现蓄水池抽样算法
蓄水池抽样是一种经典的概率抽样算法,能够在不知道数据总量的情况下从大量数据中随机抽取k个数据。此算法也被广泛应用于流式计算和在线试验设计中。本文将详细介绍如何使用Python实现蓄水池抽样算法,并附带完整的源代码。
蓄水池抽样算法核心思想是对于很大数量的数据,如何从其中等概率的随机抽取k个数据,同时使得每个数据都有相同的机会被抽中。该算法的步骤如下:
- 从数据流中读入前k个数据,作为初始的k个候选数据。
- 对于第i(i > k)个数据,以k/i概率保留该数据,并且随机替换掉之前选中的k个候选数据中的一个。
具体实现如下:
import random
def reservoir_sampling(stream, k):