我非常熟悉使用 Reservoir Sampling 在单次遍历数据中从一组未确定的长度中进行采样。在我看来,这种方法的一个限制是,在返回任何结果之前,它仍然需要遍历整个数据集。从概念上讲,这是有道理的,因为必须允许整个序列中的项目有机会替换以前遇到的项目以实现统一的样本。
有没有办法在评估整个序列之前产生一些随机结果?我正在考虑一种适合 python 的伟大 itertools 库的惰性方法。也许这可以在某些给定的容错范围内完成?我将不胜感激有关此想法的任何反馈!
只是为了稍微澄清一下这个问题,这张图总结了我对不同采样技术的内存与流式权衡的理解。我想要的是属于Stream Sampling类别的东西,我们事先不知道人口的长度。
显然,不知道先验长度并仍然获得统一样本似乎是矛盾的,因为我们很可能会将样本偏向于总体的开始。有没有办法量化这种偏见?是否需要权衡取舍?有没有人有一个聪明的算法来解决这个问题?